基本规则

  • 如果两值类型相同,直接比较值是否相等(例如两个数字比较其值)。
  • 如果两值类型不同,会尝试将两值转换为相同的类型,然后再比较。

类型转换规则

2.1 null 和 undefined

null == undefined → true

null 或 undefined 和其他任何值比较时 → false

console.log(null == undefined); // true
console.log(null == 0); // false
console.log(undefined == 0); // false

2.2 布尔值

布尔值会被转换为数字:

true → 1,false → 0

console.log(true == 1); // true
console.log(false == 0); // true
console.log(true == “1”); // true

2.3 字符串和数字

字符串会尝试被转换为数字(如果可能),再进行比较。

console.log(“123” == 123); // true
console.log(“0” == false); // true
console.log(“abc” == NaN); // false

2.4 对象和原始值

对象会被转换为其原始值(通过调用 valueOf 或 toString 方法)。

console.log([1] == 1); // true
console.log([] == 0); // true
console.log([1, 2] == “1,2”); // true
console.log({} == “[object Object]”); // false

2.5 特殊情况:NaN

NaN 和任何值都不相等,包括它自身。

console.log(NaN == NaN); // false
console.log(NaN != NaN); // true

表达式 结果 解释
null == undefined true nullundefined 被视为相等
"123" == 123 true 字符串 "123" 转换为数字 123
true == 1 true 布尔值 true 转换为数字 1
false == 0 true 布尔值 false 转换为数字 0
[] == 0 true 空数组 [] 转换为数字 0
[1] == 1 true 单元素数组 [1] 转换为其原始值 1
[1, 2] == "1,2" true 数组 [1, 2] 转换为字符串 "1,2"
{} == "[object Object]" false 普通对象和字符串直接比较,不触发类型转换
NaN == NaN false NaN 永远不等于任何值,包括自身

作者 admin

百度广告效果展示