也许它看起来微不足道,但是以下声明在Javascript中100%是真的吗?
a === b
当且仅当(typeof a === typeof b) && (a == b)
如果是,请提供证明(指向===
实施的指针?)。
否则,请提供反例。
答案 0 :(得分:1)
来自ES6 specification, 7.2.13 Strict Equality Comparison:
ES 5.1 specification here几乎相同。 ES 5.1遗漏的唯一内容是关于步骤7中符号值的部分,因为这是在ES6中添加的内容。
答案 1 :(得分:0)
作为MDN严格相等性比较两个相等的值。在比较之前,这两个值都不会隐式转换为其他值。如果值具有不同的类型,则认为这些值不相等。否则,如果值具有相同类型且不是数字,则如果它们具有相同值,则认为它们相等。最后,如果两个值都是数字,如果它们都不是NaN并且是相同的值,或者如果一个是+0且一个是-0,则它们被认为是相等的。
var num = 0;
var obj = new String('0');
var str = '0';
console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true
console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false
严格的相等几乎总是正确的比较操作。对于除数字之外的所有值,它使用明显的语义:值仅等于其自身。对于数字,它使用稍微不同的语义来掩盖两个不同的边缘情况。第一个是浮点零是正面还是负面签名。这在表示某些数学解决方案时非常有用,但由于大多数情况并不关心+0和-0之间的差异,因此严格相等将它们视为相同的值。第二个浮点包括非数值NaN的概念,以表示某些不明确的数学问题的解决方案:例如,负无穷大增加到正无穷大。严格的平等将NaN视为与其他所有价值不相等 - 包括其本身。 ((x!== x)为真的唯一情况是x为NaN时。)