Appearance
3.3 运算符
3.3.1 基本概念
表达式:由常量/变量和运算符组成的短语;
操作数:表达式中的常量和变量成为操作数;
运算符:表达式中起运算作用的符合成为运算符;
单目运算符:只能带一个操作数的成为单目运算符;(也叫一元运算符)
多目运算符:带多个操作数的成为多目运算符;
3.3.2 赋值运算符:
赋值运算符用于给 JavaScript 变量赋值。
= x=y
+= x+=y 等价于 x=x+y
-= x-=y 等价于 x=x-y
*= x*=y 等价于 x=x*y
/= x/=y 等价于 x=x/y
%= x%=y 等价于 x=x%y
3.3.3 算术运算符
加法操作符+
- 如果有任一操作数是
NaN,则返回NaN - 如果是
Infinity(无穷)加Infinity(无穷),则返回Infinity(无穷) - 如果是
-Infinity(无穷)加-Infinity(无穷),则返回-Infinity(无穷) - 如果是
Infinity(无穷)加-Infinity(无穷),则返回NaN - 如果是
+0加+0,则返回+0 - 如果是
-0加+0,则返回+0 - 如果是
-0加-0,则返回-0 - 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面
- 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起
减法操作符-
如果两个操作数都是数值,则执行数学减法运算并返回结果
如果有任一操作数是NaN,则返回NaN
如果是Infinity减Infinity,则返回NaN
如果是-Infinity减-Infinity,则返回NaN
如果是Infinity减-Infinity,则返回Infinity
如果是-Infinity减Infinity,则返回-Infinity
如果是+0减+0,则返回+0
如果是+0减-0,则返回-0
如果是-0减-0,则返回+0
如果有任一操作数是字符串、布尔值、null或undefined,则先在后台使用Number()将其转换为数值,然后再根据前面的规则执行数学运算。如果转换结果是NaN,则减法计算的结果是NaN 如果有任一操作数是对象,则调用其valueOf()方法取得表示它的数值
乘法操作符*
- 正值相乘是正值,负值相乘也是正值,正负符号不同的值相乘得到负值
- 任意值乘
NaN,得到NaN - 任意值乘
0,得到0 - 任意
Infinity(无穷)乘NaN,得到NaN
除法操作符/
- 正值除是正值,负值相除也是正值,正负符号不同的值相除得到负值
- 任意值是
NaN,得到NaN - 任意值除
0,得到Infinity(无穷) Infinity(无穷)除Infinity(无穷),得到NaN0除0,得到NaN
取模运算符:%
- 如果被除数是无限值,除数是有限值,则返回
NaN - 如果被除数是有限值,除数是0,则返回
NaN - 如果是
Infinity(无穷)除以Infinity(无穷),则返回NaN - 如果被除数是有限值,除数是无限值,则返回被除数
- 如果被除数是
0,除数不是0,则返回0
- 正负运算符:
+(如果连接的是两个数字字符串,则数字相连)-(字符串能变成数字的自动变成数字后相减)“20”+2-6=196
递增递减运算符:++、--:
使数字递增/递减1(注意前置和后置的区别)
- 若没有赋值前置和后置没有区别
- 若有赋值:前置则先计算递增/减后赋值,后置则相反
3.3.4 比较运算符
比较运算符是比较两个数的大小的运算符,返回的是一个布尔值。
- 相等运算符
==判断两个操作数是否相等。不同的数据类型会自动转换为相等的数据类型再做比较。
js
("hello"==true) //false等同运算符
===全等(值和类型),严格意义的相等,两个操作数的值和他们的类型必须完全一致。不等于:
!=不等同运算符:
!==大于:
>小于:
<大于或等于:
>=小于或等于:
<=
TIP
- 若一个是数值字符串,一个是数值,字符串会自动转换成数值进行比较。
- 若两个都是字符串,则比较首个数字的大小。
- 字母字符串会转换成对应的ASCII码(较少用到,不做讲解,知道即可)
- 布尔值的false和true会转换成0和1
3.3.5 逻辑运算符
逻辑运算符用于测定变量或值之间的逻辑。
&&and(与)||or(或)!not(非)!!双重否定运算符,效果完全等价于Boolean()
js
console.log(true && true ,false && true, false && false); // true false false
console.log(true || true ,false || true, false || false); // true true false
console.log(!0,!1); // true false
console.log(!!0,Boolean(0)); // false false
console.log(!!1,Boolean(1)); // true true3.3.6 三元运算符
根据条件在两个语句中执行其中的一个,使用符号?:语法如下:
plaintext
条件表达式 ?: 语句1 : 语句2参数说明:
条件表达式:结果会被作为布尔值处理
语句1:如果条件表达式返回true则执行语句1
语句2:如果条件表达式返回false则执行语句2
js
function fn(num) {
return (num > 0) ?'大于零' : (num === 0) ? '等于零' :'小于零'
}
console.log(fn(20)) // => 大于零
console.log(fn(0)) // => 等于零
console.log(fn(-20)) // => 小于零3.3.7 运算符优先级
运算符优先级描述了在计算表达式时执行运算的顺序。先执行具有较高优先级的运算,然后执行较低优先级的运算。例如,先执行相乘,再执行相加。
优先级顺序从上往下依次顺序,从左到右:
- 小括号
()
有括号先算括号里面的;
- 一元运算符
加加++、减减--、非!
- 算数运算符
乘*、除/、取于%、加+、减-
- 关系运算符
大于>、大于等于>=、小于<、小于等于<=
- 相等运算符
等于==、不等于!=、全等于===、不全等!==
- 逻辑运算符
且&&、或||
点符号
.(访问对象)赋值运算符
=逗号运算符
,
js
var a={n:1}; // a → {n:1}
a.x=a={n:2}; // .优先级高于= 所以 此时 a → {n:1,x:undefined} 然后在执行 执行a = {n:2} 所以 a → {n:2}
console.log(a.) // {n:2}
console.log(a.x) // undefined