在JavaScript中,如果我们想要判断两个对象之间是否相等,有下面的几种方法:
- 采用相等运算符(==)
- 采用严格相等运算符(===)
- 采用ES6 中的 Object.is() 方法。
先来说说第一种方法:
采用相等运算符(==)会认为大致相等的两个对象(值)相等。具体来说就是像下面这样
let a = 1;
let b = "1"
let result = (a == b);
//result 的值是true。
由于相等运算符(==)在运算时,会进行数据类型的转换。所以判断的并不严格。
再让我们来看看第二种方法:
采用严格相等运算符(===)判断是否相等,与(==)不同,严格相等运算符(===)不会进行类型转换,所以,不会出现上面出现的情况,但是在极端情况下,也会有出乎人意料的结果,例如:
- NaN与NaN是不相等的。
- +0 与 -0 是相等的。
在大多数系统里,这样的结果是被人们所接受的,但是在某些应用在数学领域里的系统中,这样做是不严格的,所以ES6中在Object方法中添加了内置方法is(),is的行为和(===)相同,唯独两点不同:1. NaN 等于NaN ,2. +0 不等于 -0 。
Object.is()用法如下:
Object.is('foo','foo'); //true
Object.is('1',1); //false
Object.is(+0,-0); //fasle
Object.is(NaN,NaN); //true