运算符
@jarringslee
*赋值运算符 = += -= = /= 对变量进行赋值的运算符,用于简化代码。左边是容器,右边是值
一元运算符
正号+ 符号- 赋予数据正值、负值
自增++ 自减–
前置和后置:++i和i++:一般情况下习惯使用后置i++,两者在单独使用时没有区别。
两者区别:在一行运算中,++i先给自身加完之后再参与运算,i++先参与运算之后在自加。
let i = 1; console.log(++i + 1) //i值先变为2再参与运算,输出值为3
let i = 1; console.log(i++ + 1) //i先参与运算,输出值为2,自身再自加变为2
let i = 1; console.log(i++ + ++i + i) /* i++:先用后加 值是 1,然后 i 变成 2 ++i:先加后用 i 从 2 变成 3,值是 3 i: 此时 i 已经是 3 所以整个表达式就是: 1 + 3 + 3 = 7 因此打印结果是 7。 */
比较运算符 < > <= >= == === != !== 比较结果为boolean类型的值(只有true或者false)
- == 左右两边值是否相等
- === 左右两边值和类型是否都相等(全等,常用)
- != 左右两边是否值不相等
- !== 左右两边是否不全等
- NaN不等于任何值,包括它自己
隐式转换下,常常会有值相等但类型不相同的例子。
在做
==
比较时会隐式转换,所以经常出现 “值看起来一样,但类型不同” 的情况,例如:'1' == 1 // true 字符串 '1' 被转成数字 1 0 == false // true 布尔值 false 被转成 0 null == undefined // true 规范规定这对特殊值相等 ' \n ' == 0 // true 空格字符串被转成 0
而
===
不做任何类型转换,只要类型不同就直接返回false
:'1' === 1 // false 0 === false // false null === undefined // false
所以:
==
比较转换后的值===
比较值 + 类型
- 全等/不全等(=== / !==)先看类型,类型不同直接判 false / true。
- 相等/非相等(== / !=)先转换再比较。
- 字符串比较按字典序(Unicode 码点),逐位比,直到发现大小不同的值,前缀相同则短的小。
console.log(2 === '2'); // false (类型不同) console.log(NaN === NaN); // false (NaN !== NaN) console.log(2 !== '2'); // true (类型不同) console.log(2 != '2'); // false (转换后相等) console.log('a' < 'b'); // true (97 < 98) console.log('aa' < 'ab'); // true (第二位 a < b) console.log('aa' < 'aac'); // true (前缀相同,aa 更短)
逻辑运算符 &&与(一假则假) ||或(一真则真) !非(真变假,假变真)
运算符优先级
优先级 运算符 顺序 1 小括号 () 2 一元运算符 ++ -- ! 3 算术运算符 * / % 先于 + - 4 关系运算符 > >= < <= 5 相等运算符 == != === !== 6 逻辑运算符 && 先于 || 7 赋值运算符 = += -= … 8 逗号运算符 ,