一、一元运算符
1、++ / --
①a =++i:运算符在前面 所以会先执行运算 然后在赋值 (先自增,然后参与预算)
②a =i++:从走到右计算 所以会先赋值,在执行++运算(先参与运算,然后自增)
let num = 1
console.log(num++ + 5);//6
console.log(num);//这里已经num已经变成2
console.log(++num + 5);//8 上面的num++会将num变成2
console.log(num);//3
let n = 1
console.log(n++ + ++n + n);//7
二、比较运算符
1、==:值相等
普通的相等性检查 ==
存在一个问题,它不能区分出 0
和 false
,也同样无法区分空字符串和 false
:
2、===:全等符号
严格相等运算符,在进行比较时不会做任何的类型转换。,指和类型都相等
同样的,与“不相等”符号 !=
类似,“严格不相等”表示为 !==
。
3、字符串的比较
首先比较两个字符串的首位字符大小
如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束
否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较
⭐⭐例子:console.log('2' > '12'); 返回的true 原理和上面相同 ⭐⭐
4、不同类型间的比较
当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。(隐式转化)
alert( '2' > 1 ); // true,字符串 '2' 会被转化为数字 2
alert( '01' == 1 ); // true,字符串 '01' 会被转化为数字 1
对于布尔类型值,true
会被转化为 1
、false
转化为 0
。
alert( true == 1 ); // true
alert( false == 0 ); // true
5、NaN 是未知数,所以两个未知数是不相等的 所以NaN==NaN ,NaN===NaN都是false
6、undefined 和null
当使用严格相等 ===
比较二者时,它们不相等,因为它们属于不同的类型。
当使用非严格相等 ==
比较二者时,JavaScript 存在一个特殊的规则,会判定它们相等。它们俩就像“一对恋人”,仅仅等于对方而不 等于其他任何的值(只在非严格相等下成立)。
当使用数学式或其他比较方法 < > <= >=
时:null/undefined会被转化为数字:
null被转化为
0,
undefined被转化为
NaN`。
7、undefined
不应该被与其他值进行比较
alert( undefined > 0 ); // false (1) alert( undefined < 0 ); // false (2) alert( undefined == 0 ); // false (3)