天天看点

使用datepickerdialog提示is undefined错误_JavaScript中的Object.is()与“===”运算符

使用datepickerdialog提示is undefined错误_JavaScript中的Object.is()与“===”运算符

三重相等运算符

===

严格检查2个值是否相同:

1 === 1;    // => true
1 === '1';  // => false
1 === true; // => false
           

但是,ES2015规范引入了

Object.is()

,其行为与严格的相等运算符几乎相同:

Object.is(1, 1);    // => true
Object.is(1, '1');  // => false
Object.is(1, true); // => false
           

主要问题是:什么时候使用

Object.is()

代替严格的相等性检查?让我们找出答案。

1.严格相等检查操作符

首先,让我们快速回顾一下严格的相等运算符是如何工作的。

当两个值的类型相同且持有相同的值时,严格相等检查运算符的计算结果为

true

例如,以下原始值是相等的,因为它们是相同的类型且具有相同的值:

1         === 1;         // => true
'abc'     === 'abc';     // => true
true      === true;      // => true
null      === null;      // => true
undefined === undefined; // => true
           

严格相等运算符不执行类型的强制转换,即使操作符持有合理的相同值,但是不同类型的操作符,它们也不是严格相等的:

1    === '1';       // => false
1    === true;      // => false
null === undefined; // => false
           

对对象执行严格相等检查时,对象仅与自身严格相等:

const myObject = { prop: 'Value' };
myObject === myObject;  // => true
           

即使2个对象的属性和值完全相同,它们的值也不同:

const myObject1 = { prop: 'Value' };
const myObject2 = { prop: 'Value' };
myObject1 === myObject2; // => false
           

以上比较方案在

Object.is(valueA,valueB)

中的工作原理完全相同。

严格相等检查和

Object.is()

之间的区别在于,如何处理

NaN

和如何处理负零

-0

首先,

NaN

(非数字)并不严格等于任何其他值,即使使用另一个

NaN

NaN === NaN; // => false
NaN === 1;   // => false
           

其次,严格相等运算符不能将

-0

+0

区分开:

-0 === +0; // => true
           
严格相等运算符使用严格相等比较算法。 http://www. ecma-international.org/ ecma-262/7.0/index.html#sec-strict-equality-comparison

2. Object.is()

Object.is(valueA,valueB)

以与严格相等运算符相同的方式检查相等性的参数,但有两个区别。

首先,

NaN

等于另一个

NaN

值:

Object.is(NaN, NaN); // => true
Object.is(NaN, 1);   // => false
           

其次,

Object.is()

区分

-0

+0

Object.is(-0, +0); // => false
           
与严格相等运算符相比,

Object.is()

使用相同值比较算法。 http://www. ecma-international.org/ ecma-262/7.0/index.html#sec-samevalue

总结

在大多数情况下,严格相等运算符是比较值的好方法。

如果你想直接检查

NaN

值或对负零和正零进行更严格的区分,那么

Object.is()

是一个不错的选择。

Object.is()

作为比较值的函数性方法也很有用,例如在函数式编程中。

来源:https://dmitripavlutin.com,作者:Dmitri Pavlutin,翻译:公众号《前端全栈开发者》