https://mp.weixin.qq.com/s/4xZ420eTVHnb0zsaPCqOYA
注:注意,比较运算符可以比较各种类型的值,不仅仅是数值。
JavaScript 一共提供了8个比较运算符。
这八个比较运算符分成两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。
2、非相等运算符:字符串的比较
字符串按照字典顺序进行比较。JavaScript 引擎内部首先比较首字符的 Unicode 码点。如果相等,再比较第二个字符的 Unicode 码点,以此类推。
2>11
//false
'2'>'11'
//true
注:第二个中,‘2’和’11’都是字符串,所以是2和1的Unicode码先比较,第一个中直接比较2和11
3、非相等运算符:非字符串的比较
如果两个运算子都不是字符串,分成以下三种情况。
(1)原始类型值
5 > '4'
// true
// 等同于 5 > Number('4')
// 即 5 > 4
true > false
// true
// 等同于 Number(true) > Number(false)
// 即 1 > 02 > true
// true
// 等同于 2 > Number(true)
// 即 2 > 1
上面代码中,字符串和布尔值都会先转成数值,再进行比较。
任何值(包括NaN本身)与NaN比较,返回的都是false。
1 > NaN // false
1 <= NaN // false
'1' > NaN // false
'1' <= NaN // false
NaN > NaN // false
NaN <= NaN // false
4、严格相等运算符
1.先比类型,再比值,不同进制是同一类型
2.NaN与任何值都不相等(包括自身)。另外,正0等于负0。
NaN === NaN // false
+0 === -0 // true
NAN,undefined和null
NaN===NaN
//false
undefined===undefined
true
null===null
//true
null===undefined
//false
undefined == null
//true
6、相等运算符
先看类型,若相同和严格相同,若不相同,分下面四种情况
Number('11a')
//NaN
Number('')
//0
原始类型值
数值,字符串,布尔
原始类型值比较时先会转换成数值
(2)对象与原始类型值比较
先转换成原始数值,在比较,与布尔比较时,先都转换成数值。
建议不要使用相等运算符(),最好只使用严格相等运算符(=)。
1.&& 若前十true,输出,后,若前为false,输出前,且运算符可以多个连用,这时返回第一个布尔值为false的表达式的值。如果所有表达式的布尔值都为true,则返回最后一个表达式的值。
2.|| 若前为true,输出前,若前false,输出后,或运算符可以多个连用,这时返回第一个布尔值为true的表达式的值。如果所有表达式都为false,则返回最后一个表达式的值。
3.存在短路情况,输出后,以后的变量值不看了