相等性检查
==
(包括严格相等) 和普通比较符> < >= <=
的代码逻辑是相互独立的。
比较结果为 Boolean 类型
字符串之间的比较
字符串之间的比较是指,两边都是字符串!
此时,两个字符串时按照字符从左至右,进行逐个比较的。
字符的大小取决于 JS 的内部编码表 - Unicode。
汉字也是有 Unicode 表示的。
'大' < '小' => true
不同类型之间的比较
待比较的两边有一个字符串或没有字符串时,统一转化为数字 number 类型,再判定大小。
基本类型的值转换为 number 的转换规则
"0b10" == 2 => true
0 < true => true
1 > false => true
0 < 'a' => false('a'转换为 number 就是 NaN)
BigInt 与非 BigInt 进行比较,会将 BigInt 转为 number 类型:
9007199254740992n == 2**53 + 1 => true
Number(9007199254740992n) == 2**53 + 1 => true
NaN 与任何类型, 包括自身比较,都返回 false
NaN > NaN => false
NaN == NaN => false
NaN < NaN => false
NaN === NaN => false
严格相等与严格不相等
严格相等两边都是同一类型的数值时,结果与普通相等完全一样的。
但是严格相等在比较同一类型的数值时,不会进行任何类型转换。
如果两边的数不是同一个数据类型,严格相等会立刻返回 false。undefined
和 null
与自身严格相等
undefined === undefined => true
null === null => true
对 null 和 undefined 进行比较
实际中,要检查变量是否是 null 和 undefined
普通相等 ==
比较 null 与 undefined
存在特殊的规则
null == undefined => true
null == 0 => false
undefined == 0 => false
undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以 *null
与 undefined
之间互等外,不会等于任何其他的值 *
null == null => true
undefined == undefined => true
null == undefined => true
*undefined 只与 null 和 undefined 相等 *
非直接相等比较时
- null 转换为数字
0
- undefined 转换为
NaN
由于相等的比较逻辑与其他比较符号不同,所以会出现:
null > 0 -> false
null < 0 -> false
null >= 0 -> true(null 转为 number 类型就是 0)
null <= 0 -> true
undefined 就不用看了,因为 undefined 转换为数值类型是 NaN,而 NaN 不等于任何 number 类型,不管和哪个值比较,比较结果都是 false。
练习
"apple" > "pineapple" → false
"2" > "12" → true(两边都是字符串,首位 "2" > "1")
undefined == null → true
undefined === null → false(不同类型)
null == "\n0\n" → false(null 只与自身和 undefined 相等)
null === +"\n0\n" → false(不同类型)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。