2017-04-18 79 views
0

我们知道=====之间的区别是什么 - 基本上,===可以阻止JavaScript引擎将参数中的一个转换为相同类型的两个参数。但现在,在ES6,来到一个新的运营商 - Object.is这是一个有点混乱(或者===现在混乱..)Javascript ES6。 ===和Object.is之间的区别

从Mozila网站(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness),我们可以看到其中的差别:

的趋同比较:

x   y ==  ===  Object.is 
+0   -0 true true false 
NaN  NaN false false true 

所以,对我来说,看起来就像Object.is是更严格的比较参数,如果是这样,问题提出 - unstrict怎么===(所谓的“绝对平等”):)

回答

1

从你链接的文章:

当使用Object.is与三重平等

除了它把NaN的,一般,唯一的一次Object.is迈向零特殊的行为是这样的可能会感兴趣的是追求某些元编程方案,尤其是关于属性描述符,当您的工作需要反映Object.defineProperty的某些特征时。如果你的用例不需要这个,建议避免使用Object.is并使用===。即使您的需求涉及将两个NaN值之间的比较评估为true,但通常情况下,使用NaN检查(使用可从以前版本的ECMAScript获得的isNaN方法)特殊情况比计算周围计算如何影响您在比较中遇到的任何零点的符号。

+0

那篇文章太长看,我只是看图片。谢谢:) –

+0

我个人觉得4种类型的平等的有点多的JS。特别是SameValue vs SameValueZero ...呃。 – gforce301

+0

啊,这是正是为什么我开始学习JS“在艰难的历程” - 先学什么引擎盖下... –

1

通过MDN

这也是不一样的根据===运算符是相等的。 ===运算符(以及==运算符)也将数字值-0和+0视为相等,并将Number.NaN视为不等于NaN。

+0

啊,所以这是一种方法..嗯..认为它是一个比较。但是,比较也是一种方法,对吧? Thx,我第一天用Javascript .. –

+1

@ J.D .:它*是*比较:在你给出的两个参数中,为了平等(通过一个平等的定义; JavaScript至少有四个)。 :-) –

+0

@ T.J。 Crowder,所以你也是说运营商没有存储在内存(Execution Context)中,就像函数一样吧?是什么让我迷惑了MDN的这一行 - “Object.is()方法确定两个值是否是相同的值。” - 他们写**方法** ... –