一些常见的例子
var str1 = '1';
var str2 = new String('1');
console.log(str1 == str2); // true
console.log(str1 === str2); // false
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log({} == {}); // false
console.log({} === {}); // false
console.log(null == undefined); //true
console.log([10] == 10); //true
console.log('10' == 10); //true
console.log([] == 0); //true
console.log(true == 1); //true
console.log([] == false); //true
console.log(![] == false); //true
console.log('' == 0); //true
console.log('' == false); //true
console.log(null == false); //false
console.log(!null == true); //true
1. === 严格相等,会比较两个值的类型和值
1.1 Strict Equality Comparison
- 如果Type(x)和Type(y)不同,返回false
- 如果Type(x)和Type(y)相同
-
如果Type(x)是Undefined,返回true
-
如果Type(x)是Null,返回true
-
如果Type(x)是String,当且仅当x,y字符序列完全相同(长度相同,每个位置上的字符也相同)时返回true,否则返回false
-
如果Type(x)是Boolean,如果x,y都是true或x,y都是false返回true,否则返回false
-
如果Type(x)是Symbol,如果x,y是相同的Symbol值,返回true,否则返回false
-
如果Type(x)是Number类型:
如果x是NaN,返回false
如果y是NaN,返回false
如果x的数字值和y相等,返回true
如果x是+0,y是-0,返回true
如果x是-0,y是+0,返回true
其他返回false
-
2. == 抽象相等,比较时,会先进行类型转换,然后再比较值
- 如果Type(x)和Type(y)相同,返回x===y的结果
- 如果Type(x)和Type(y)不同
- 如果x是null,y是undefined,返回true
- 如果x是undefined,y是null,返回true
- 如果Type(x)是Number,Type(y)是String,返回 x==ToNumber(y) 的结果
- 如果Type(x)是String,Type(y)是Number,返回 ToNumber(x)==y 的结果
- 如果Type(x)是Boolean,返回 ToNumber(x)==y 的结果
- 如果Type(y)是Boolean,返回 x==ToNumber(y) 的结果
- 如果Type(x)是String或Number或Symbol中的一种并且Type(y)是Object,返回 x==ToPrimitive(y) 的结果
- 如果Type(x)是Object并且Type(y)是String或Number或Symbol中的一种,返回 ToPrimitive(x)==y 的结果
- 其他返回false
待更...