Javascript MDN“;对象。是“;备选提案
我读过。 它为不提供此方法的浏览器提供了替代代码:Javascript MDN“;对象。是“;备选提案,javascript,object,methods,ecmascript-6,Javascript,Object,Methods,Ecmascript 6,我读过。 它为不提供此方法的浏览器提供了替代代码: if (!Object.is) { Object.is = function(v1, v2) { if (v1 === 0 && v2 === 0) { return 1 / v1 === 1 / v2; } if (v1 !== v1) { return v2 !== v2; } return
if (!Object.is) {
Object.is = function(v1, v2) {
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
if (v1 !== v1) {
return v2 !== v2;
}
return v1 === v2;
};
}
问题很简单:第二个“如果”什么时候是真的
感谢您的关注。它是这样写的:
这也不同于根据===
操作人员===运算符(以及==运算符)处理
数值-0和+0相等,它将number.NaN视为不相等
等于NaN
逻辑是
NaN!==NaN
是唯一出现的情况==
运算符在同一变量上返回true
,因此它必须是关于NaN
比较的。然后,它对v2
执行相同的检查,并根据结果返回true或false:如果v2
比较为true
,则与NaN比较是关于NaN的,因此返回true
,如果不是,则返回false
,因为NaN与非NaN的事物永远不一样。请注意,我们有不止一个NaN:
var notNaN=new DataView(新的Uint8Array([0x7f,0xf8,0,0,0,1]).buffer)。getFloat64(0)
Object.is(notNaN,NaN)//true
const byteOf=(number,index)=>{let v=new DataView(new ArrayBuffer(8));v.setFloat64(0,number);返回v.getUint8(index);}
byteOf(NaN,7)//0
字节(notNaN,7)//1
所以有两个可区分的值,但是Object.is()表示,它们是相同的==NaN将返回true,但不是NaN==楠。。。这里v1是针对v1进行测试的。。。这意味着NaN对NaN或Number.NaN对Number.NaN。我还是不明白…
Number.NaN
或NaN
,没关系。JavaScript在逻辑上只有一个NaN
。为清楚起见,NaN===NaN将为false。NaN只是Number.NaN的别名