1. 如果两个值类型相同,则直接比较它们的值。
  2. 如果一个值是 null,另一个值是 undefined,则它们相等。
  3. 如果一个值是数字,另一个值是字符串,则将字符串转换为数字后再比较。
  4. 如果一个值是布尔值,另一个值是非布尔值,则将布尔值转换为数字后再比较。
  5. 如果一个值是对象,另一个值是数字、字符串或布尔值,则将对象转换为原始值后再比较。
xy=====
undefinedundefined✅✅
nullnull✅✅
truetrue✅✅
falsefalse✅✅
'foo''foo'✅✅
00✅✅
+0-0✅✅
+00✅✅
-00✅✅
0n-0n✅✅
0false✅❌
""false✅❌
""0✅❌
'0'0✅❌
'17'17✅❌
[1, 2]'1,2'✅❌
new String('foo')'foo'✅❌
nullundefined✅❌
nullfalse❌❌
undefinedfalse❌❌
{ foo: 'bar' }{ foo: 'bar' }❌❌
new String('foo')new String('foo')❌❌
0null❌❌
0NaN❌❌
'foo'NaN❌❌
NaNNaN❌❌

说明:

  • ✅ 表示比较结果为 true
  • ❌ 表示比较结果为 false