基本类型的值的比较 - JavaScript 基础

相等性检查 == (包括严格相等) 和普通比较符 > < >= <= 的代码逻辑是相互独立的。

比较结果为 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。
undefinednull 与自身严格相等

undefined === undefined => true
null === null => true

对 null 和 undefined 进行比较

实际中,要检查变量是否是 null 和 undefined

普通相等 == 比较 null 与 undefined

存在特殊的规则

null == undefined => true
null == 0 => false
undefined == 0 => false

undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以 *nullundefined 之间互等外,不会等于任何其他的值 *

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(不同类型)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。
我的空间