ES5 中判断两个值是否相等:
(1)相等运算符(==)
(2)严格相等运算符(===)
这两个方法各自有各自的特点:
F12打开chrome调试器,如下例子:
5=="5"
//true
可以看到:相等运算符(==)会对比较的两个值进行类型转换。
5==="5"
//false
严格相等运算符(==)不会对比较的两个值进行类型转换。
NaN === NaN
//false
但是,使用严格相等运算符(==),NaN 不等于自身。
+0 === -0
//true
ES6 Object.is()
ES6 添加了新方法Object.is来比较两个值严格相等。
定义:Object.is 方法判断两个值是否是相同的值。
语法:Object.is(value1, value2)
value1:第一个需要比较的值
value2:第二个需要比较的值
返回值:表示两个参数是否相同的 布尔值 。
它与严格比较运算符(===)基本一致,不同之处只有两个:
(1)+0不等于-0;
(2)NaN等于自身。
Object.is()方法可应用于:
(1)比较两个字符串。
(2)比较两个数字。
(3)比较两个对象。
Object.is('abc','abc')
//true
Object.is('abc','abcd')
//false
Object.is(window,window)
//true
Object.is([],[])
//false
Object.is({},{})
//false
Object.is(+0,-0)
//false
Object.is(0,-0)
//false
Object.is(0,+0)
//true
Object.is(NaN,NaN)
//true
Object.is()方法和“==”运算符之间的区别:
+0 == -0
//true
+0 === -0
//true
Object.is(+0,-0)
//false
可以看到:
== 和 === 运算符将数字值“+0”和“-0”视为相等,而Object.is()方法则将它们视为不相等。
NaN == NaN
//false
NaN === NaN
//false
Object.is(NaN,NaN)
//true
可以看到:
如果两个值都是数字并且都是“NaN”,== 和 === 将其视为不相等;而Object.is()方法则将它们视为相等。