- 如果两个值类型相同,则直接比较它们的值。
- 如果一个值是 null,另一个值是 undefined,则它们相等。
- 如果一个值是数字,另一个值是字符串,则将字符串转换为数字后再比较。
- 如果一个值是布尔值,另一个值是非布尔值,则将布尔值转换为数字后再比较。
- 如果一个值是对象,另一个值是数字、字符串或布尔值,则将对象转换为原始值后再比较。
x | y | == | === | |
---|---|---|---|---|
undefined | undefined | ✅ | ✅ | |
null | null | ✅ | ✅ | |
true | true | ✅ | ✅ | |
false | false | ✅ | ✅ | |
'foo' | 'foo' | ✅ | ✅ | |
0 | 0 | ✅ | ✅ | |
+0 | -0 | ✅ | ✅ | |
+0 | 0 | ✅ | ✅ | |
-0 | 0 | ✅ | ✅ | |
0n | -0n | ✅ | ✅ | |
0 | false | ✅ | ❌ | |
"" | false | ✅ | ❌ | |
"" | 0 | ✅ | ❌ | |
'0' | 0 | ✅ | ❌ | |
'17' | 17 | ✅ | ❌ | |
[1, 2] | '1,2' | ✅ | ❌ | |
new String('foo') | 'foo' | ✅ | ❌ | |
null | undefined | ✅ | ❌ | |
null | false | ❌ | ❌ | |
undefined | false | ❌ | ❌ | |
{ foo: 'bar' } | { foo: 'bar' } | ❌ | ❌ | |
new String('foo') | new String('foo') | ❌ | ❌ | |
0 | null | ❌ | ❌ | |
0 | NaN | ❌ | ❌ | |
'foo' | NaN | ❌ | ❌ | |
NaN | NaN | ❌ | ❌ |
说明:
- ✅ 表示比较结果为
true
- ❌ 表示比较结果为
false