JavaScript提供三种不同的值比较操作:
1.严格相等 ===
对于除了数值之外的值,全等操作符使用明确的语义进行比较:一个值只与自身全等。
var obj = new String("0");
var str = "0"
var obj1 = obj;
console.log(obj === str); //false
console.log(obj===obj1); //true
console.log(null === undefined); // false
浮点数 0 是不分正负的,全等操作符认为这两个值是全等的。
console.log(-0 === +0) // true
浮点数包含了 NaN 值,全等操作符认为 NaN 与其他任何值都不全等,包括它自己。
console.log(NaN === NaN); // false
2.非严格相等 ==
相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。
var num = 0;
var obj = new String("0");
var str = "0";
console.log(num == obj); // true
console.log(num == str); // true
console.log(obj == str); // true
console.log(NaN === NaN); //false
3.Object.is()
Object.is() 与=== 不同之处只有两个:一是+0不等于-0,二是NaN等于自身。
console.log(Object.is(+0, -0)); // false
console.log(Object.is(NaN, NaN)); // true
参考网页:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness