4JS表达式和运算符expression and operator

表达式(expression)JavaScript中的一个短语,JavaScript解释器会将其计算(evaluate)出一个结果。程序中的常量是最简单的一类表达式。变量名也是一种简单的表达式,它的值就是赋值给变量的值。复杂表达式是由简单表达式组成的。

将简单表达式组合成复杂表达式最常用的方法就是使用运算符(operator)。

和C语言风格相似。

4.1主表达式 primary expression

原始表达式是表达式的最小单位——它们不再包含其他表达式。JavaScript中的原始表达式包含常量或直接量、关键字和变量。

4.2对象和数组初始化表达式

对象和数组初始化表达式实际上是一个新创建的对象和数组。

4.3函数定义表达式

函数定义表达式定义一个JavaScript函数。表达式的值是这个新定义的函数。

4.4属性访问表达式

expression.identifer
expression[expression]

第一种写法是一个表达式后跟随一个句点和标识符。。第二种写法是使用方括号。

4.4.1条件式属性访问 ?.

可以避免访问不存在属性是程序报错。

4.5调用表达式

JavaScript中的调用表达式(invocation expression)是一种调用(或者执行)函数或方法的语法表示。

任何一个调用表达式都包含一对圆括号和左圆括号之前的表达式。

4.5.1 条件式调用

可以使用?.()而不是()来调用函数。错误是可以不报错。《为了网页不死机,不遗余力,点赞》

4.6对象创建表达式

对象创建表达式(object creation expression)创建一个对象并调用构造函数 初始化新对象的属性。关键字new。

4.7操作符运算符

JavaScript中的运算符用于算术表达式、比较表达式、逻辑表达式、赋值表达式等。

4.7.1操作符的个数

运算符可以根据其操作数的个数进行分类。。JavaScript中的大多数运算符(比如“*”乘法运算符)是一个二元运算符(binary operator)。。JavaScript同样支持一些一元运算符(unary operator)。。最后,JavaScript支持一个三元运算符(ternary operator),条件判断运算符“?:”,它将三个表达式合并成一个表达式。

4.7.2操作数类型和结果类型

一些运算符可以作用于任何数据类型,但仍然希望它们的操作数是指定类型的数据,并且大多数运算符返回(或计算出)一个特定类型的值。在表4-1标题为“类型”的列中列出了运算符操作数的类型(箭头前)和运算结果的类型(箭头后)。

JavaScript运算符通常会根据需要对操作数进行类型转换。有一些运算符对操作数类型有着不同程度的依赖。最明显的例子是加法运算符。

左值(lvalue)是一个古老的术语,它是指“一个可以合法地出现在赋值表达式左侧的表达式”。

4.7.3 操作符的副作用。

有一些表达式则具有副作用,即对它们求值可能影响将来求值的结果。例如:

如果给一个变量或属性赋值,那么那些使用这个变量或属性的表达式的值都会发生改变。“++”和“--”递增和递减运算符与此类似,因为它们包含隐式的赋值。delete运算符同样有副作用:删除一个属性就像(但不完全一样)给这个属性赋值undefined。

4.7.4 操作符优先级

表4-1中所示的运算符是按照优先级从高到低排序的,每个水平分割线内的一组运算符具有相同的优先级。

实际上,如果你真的不确定你所使用的运算符的优先级,最简单的方法就是使用圆括号来强行指定运算次序。有些重要规则需要熟记:乘法和除法的优先级高于加法和减法,赋值运算的优先级非常低,通常总是最后执行的。

4.7.5 运算符的结合性

在表4-1中标题为A的列说明了运算符的结合性。L指从左至右结合,R指从右至左结合。

4.7.6 运算顺序

运算符的优先级和结合性规定了它们在复杂的表达式中的运算顺序,但并没有规定子表达式的计算过程中的运算顺序。JavaScript总是严格按照从左至右的顺序来计算表达式。

例子:  w = x + y * z 的顺序,w 先求值,后续 x, y,z 求值。然后 y*z,加到x上,最后结果赋值给 w。

4.8算数表达式

基本的算术运算符是*(乘法)、/(除法)、%(求余)、+(加法)和-(减法)。

4.8.1“+”运算符

二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作。

从技术上讲,加法操作符的行为表现为:
·如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值。
·在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。
·否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。

4.8.2 一元算术运算符

一元运算符作用于一个单独的操作数,并产生一个新值。在JavaScript中,一元运算符具有很高的优先级,而且都是右结合(right-associative)。本节将讲述一元算术运算符(+、-、++和--),必要时,它们会将操作数转换为数字。“+”和“-”是一元运算符,也是二元运算符。

4.8.3 位运算符

位运算符可以对由数字表示的二进制数据进行更低层级的按位运算。按位与(&),按位或(|),按位异或(^),按位非(~),左移(<<),带符号右移(>>),无符号右移(>>>)

4.9关系表达式

表达式总是返回一个布尔值。

4.9.1 相等和不等运算符

==”和“===”运算符用于比较两个值是否相等,当然它们对相等的定义不尽相同。

JavaScript支持“=”、“==”和“===”(赋值、相等、恒等)运算符。

“!=”和“!==”运算符的检测规则是“==”和“===”运算符的求反。

4.9.2 比较运算符

小于(<),大于(>),小于等于(<=),大于等于(>=)

有一个例外,其一个操作数是(或者转换后是)NaN的时候,所有4个比较运算符均返回false。

4.9.3 in 运算符

in运算符的左侧应当是:字符串,符号或可以转换为字符串的值。

in运算符的右侧:对象。

返回值为 true | false

4.9.4 instanceof运算符

左侧: 对象。 右侧: 类。 返回值: true | false

4.10 逻辑表达式

逻辑运算符“&&”、“||”和“!”是对操作数进行布尔算术运算,经常和关系运算符一起配合使用,逻辑运算符将多个关系表达式组合起来组成一个更复杂的表达式。

4.10.1逻辑与(&&)

a && b ; 如果a是false,直接返回false。 如果a是true,计算b进行判断。 可以实现if语句的功能。

4.10.2 逻辑或(||)

a || b ,有逻辑与相同的短路功能。 if a 是true 直接返回true,并不会执行 b。

4.10.3,逻辑非(!)

可以用 !! a 的方式取得 a 的布尔值。

4.11赋值表达式

JavaScript使用“=”运算符来给变量或者属性赋值。

4.11.1带操作的赋值运算

4.12求值表达式eval()

和其他很多解释性语言一样,JavaScript同样可以解释运行由JavaScript源代码组成的字符串,并产生一个值。

严格模式将"eval"列为保留字,这让eval()更像一个运算符。不能用一个别名覆盖eval()函数。并且变量名、函数名、函数参数或者异常捕获的参数都不能取名为"eval"。

4.13其他操作符

4.13.1 条件运算符(?:)

x>0?x:-x; //求x的绝对值
greeting = "hello" + ( username ? username : "there");

4.13.2先定义(??)

功能:

a ?? b;
// 等价语句
( a !== null && a !== undefined ) ? a : b;

??是短路的,这个功能与 && 、 || 类似。 

??是对||的一个有用的替代,适合选择先定义的操作数,而不是第一个未真值的操作数。

||的例子:

??的例子。

4.13.3 typeof操作符

typeof是一元运算符,放在其单个操作数的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串。

4.13.4 delete操作符

delete是一元操作符,它用来删除对象属性或者数组元素。它是用来做删除操作的,不是用来返回一个值的。delete运算的返回值是布尔值。

4.13.5 await操作符

让异步编程更自然。涉及到 Promise对象, async关键字声明为异步的函数中。

4.13.6 void操作符

操作数会照常计算,但忽略计算结果并返回undefined。 C语言用 void main开头,比较类似吧。

4.13.7 逗号运算符

功能, 先求左操作数的值,再求右操作数的值。 返回右操作数的值。逗号运算符最常用的场景是在for循环中。示例

for ( i=0,j=10; i<j; i++,j--){console.log(i+j);
}

4.14 小结

表达式是JS程序中的短语

任何表达式都可以求值为一个JS值。

表达式除了产生一个值之外,还会有 Side-effect (如变量赋值)

简单表达式可以与操作符结合,产生更大的表达式

JS操作符分类:算术,比较,布尔逻辑,赋值,位操作等

JS中“+”可以做加法,也可以做字符串的拼接。

&&和||操作符,具有特殊的“短路”行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类与对象(中篇)

1、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 2、构造函数---初始…

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC

CRM系统主要干什么的

阅读本文&#xff0c;你将了解&#xff1a;一、CRM系统是什么&#xff1b;二、CRM系统主要干什么的&#xff1b;三、CRM系统在企业管理中的重要作用&#xff1b;四、企业落地案例分享——大吉包装。 本文所提及的功能演示和图片内容均来自于我们公司正在使用的简道云CRM系统&a…

【JVM】类加载流程

目录 1.加载 2.链接 &#xff08;1&#xff09;校验 &#xff08;2&#xff09;准备 &#xff08;3&#xff09;解析 3.初始化 4.使用 5.卸载 1.加载 加载阶段&#xff0c;简言之&#xff0c;查找并加载类的二进制数据&#xff0c;生成 Class 的实例 在加载类时&#x…

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录 1 -> 引用 1.1 -> 引用概念 1.2 -> 引用特性 1.3 -> 常引用 1.4 -> 使用场景 1.5 -> 传值、传引用效率比较 1.6 -> 值和引用作为返回值类型的性能比较 1.7 -> 引用和指针的区别 2 -> 内联函数 2.1 -> 概念 2.2 -> 特性 3 -…

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

共享的IP隔一段时间就变?用这种方法可以不需要知道电脑IP

前言 一般来说,电脑接入路由器之后,IP是由路由器自动分配的(DHCP),但如果隔一段时间不开机连接路由器,或者更换了别的网卡进行连接,自动分配的IP就会更改。 比如你手机连接着电脑的共享IP:192.168.1.10,但过段时间之后,电脑的IP突然变成了192.168.1.11,那么你的所有…

Qt+css绘制标题

之前学过html和小程序&#xff0c;帮老师做项目的时候也用过vue&#xff0c;在想qt绘制界面是不是也可以使用css,然后查了一些资料&#xff0c;绘制了一个标题&#xff0c;准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数&#xff0c;一个用于绘…

幻兽帕鲁服务器多少钱一个?26元,阿里云腾讯云华为云

2024年幻兽帕鲁服务器价格表更新&#xff0c;阿里云、腾讯云和华为云Palworld服务器报价大全&#xff0c;4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元&#xff0c;阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表&#xff0c;多配置报价&#xff1a; 幻兽帕鲁…

透明拼接屏造型:多样拼接与影响因素

透明拼接屏&#xff0c;以其独特的透明显示效果和灵活的拼接方式&#xff0c;在现代显示领域中独树一帜。其造型多样&#xff0c;包括横屏拼接、竖屏拼接、异形拼接以及定制拼接等多种方式&#xff0c;满足了不同场景和应用的需求。尼伽小编将详细介绍这些拼接方式&#xff0c;…

PR转场模板|超级炫酷故障特效电影游戏视频转场PR模板剪辑素材

premiere转场&#xff0c;包含200个带有Sound FX的独特视频转场效果。加强剪辑视频视觉效果&#xff0c;在镜头之间的剪辑和添加文字动画&#xff01; MYFX Extension可帮助您一键浏览和应用预设&#xff01;可以喜爱预设&#xff0c;并拥有自己亲手挑选的库。如果您有任何问题…

字符数组的学习

前言&#xff1a; 在前面我们介绍过字符型数据是以字符的ASCII码储存在存储单元中&#xff0c;一般占一个字节&#xff0c;由于 ASCII码也属于整数类型&#xff0c;因此在C99标准中把字符类型归纳为整数类型中的一种&#xff0c;由于字符数据 的应用比较广泛&#xff0c;尤其…

抽象类(Java)、模板方法设计模式

一、概念 在Java中有abstract关键字&#xff0c;就是抽象的意思&#xff0c;可用来修饰类和成员方法。 用abstract来修饰类&#xff0c;那这个类就是抽象类&#xff1b;修饰方法&#xff0c;那这个方法就是抽象方法。 修饰符 abstract class 类名{修饰符 abstract 返回值类型…

【数据结构 02】队列

一、原理 队列通常是链表结构&#xff0c;只允许在一端进行数据插入&#xff0c;在另一端进行数据删除。 队列的特性是链式存储&#xff08;随机增删&#xff09;和先进先出&#xff08;FIFO&#xff1a;First In First Out&#xff09;。 队列的缺陷&#xff1a; 不支持随机…

看员工聊天记录,监控员工电脑聊天记录软件有哪些?

企业监控员工电脑聊天记录软件是指企业为了管理员工、提高工作效率和保护公司机密而采取的一种技术手段。随着互联网的发展和普及&#xff0c;员工在工作时间内使用聊天工具进行沟通已经成为常态&#xff0c;因此企业需要一种有效的方式来监控和管理员工的聊天记录。 为什么要监…

【算法与数据结构】198、213、337LeetCode打家劫舍I, II, III

文章目录 一、198、打家劫舍二、213、打家劫舍 II三、337、打家劫舍III三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、198、打家劫舍 思路分析&#xff1a;打家劫舍是动态规划的的经典题目。本题的难点在于递归公式…

机器学习 | 掌握线性回归的实战技巧

目录 初识线性回归 损失和优化 欠拟合与过拟合 正则化线性模型 模型的保存与加载 初识线性回归 线性回归(Linearregression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。特点是&#xff1a;有一个自变量的情况称为单…

代码随想录刷题笔记 DAY 18 | 找树左下角的值 No.513 | 路经总和 No.112 | 从中序与后序遍历序列构造二叉树 No.106

Day 18 01. 找树左下角的值&#xff08;No. 513&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入…

不移其志,踏浪前行 | 北京智和信通召开2023年度工作总结大会

岁聿云暮&#xff0c;新元肇启&#xff0c;2024年1月24日&#xff0c;北京智和信通技术有限公司&#xff08;以下简称“北京智和信通”&#xff09;召开2023年度年终总结大会。会上&#xff0c;各部门负责人全面分析公司业务发展态势&#xff0c;各部门员工依次汇报主要工作情况…

QT 使用 QWebChannel 与 Web 端通信展示文件信息

前言 本文将展示如何使用 QWebChannel 来实现 Web 端与 QT 端之间的交互&#xff0c;同时会通过一个在浏览器端展示文件夹信息的简单例子来展示其具体使用&#xff0c;其功能如下&#xff1a; 获取指定文件夹下的文件信息。通过使用 QT 的 QFileSystemWatcher 对指定文件夹进…