mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
edit Object/Object.is
This commit is contained in:
parent
769ef139b1
commit
aa7a6ac005
@ -269,7 +269,9 @@ obj[key2].name // ""
|
||||
|
||||
## Object.is()
|
||||
|
||||
`Object.is`用来比较两个值是否严格相等。它与严格比较运算符(===)的行为基本一致。
|
||||
ES5比较两个值是否相等,只有两个运算符:相等运算符(`==`)和严格相等运算符(`===`)。它们都有缺点,前者会自动转换数据类型,后者的`NaN`不等于自身,以及`+0`等于`-0`。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
|
||||
|
||||
ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。`Object.is`就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
|
||||
|
||||
```javascript
|
||||
Object.is('foo', 'foo')
|
||||
|
@ -41,7 +41,20 @@ divs().forEach(div => set.add(div))
|
||||
set.size // 56
|
||||
```
|
||||
|
||||
向Set加入值的时候,不会发生类型转换,所以`5`和`"5"`是两个不同的值。Set内部判断两个值是否不同,使用的算法类似于精确相等运算符(`===`),这意味着,两个对象总是不相等的。唯一的例外是`NaN`等于自身(精确相等运算符认为`NaN`不等于自身)。
|
||||
向Set加入值的时候,不会发生类型转换,所以`5`和`"5"`是两个不同的值。Set内部判断两个值是否不同,使用的算法叫做“Same-value equality”,它类似于精确相等运算符(`===`),主要的区别是`NaN`等于自身,而精确相等运算符认为`NaN`不等于自身。
|
||||
|
||||
```javascript
|
||||
let set = new Set();
|
||||
let a = NaN;
|
||||
let b = NaN;
|
||||
set.add(a);
|
||||
set.add(b);
|
||||
set // Set {NaN}
|
||||
```
|
||||
|
||||
上面代码向Set实例添加了两个`NaN`,但是只能加入一个。这表明,在Set内部,两个`NaN`是相等。
|
||||
|
||||
另外,两个对象总是不相等的。
|
||||
|
||||
```javascript
|
||||
let set = new Set();
|
||||
@ -53,7 +66,7 @@ set.add({})
|
||||
set.size // 2
|
||||
```
|
||||
|
||||
上面代码表示,由于两个空对象不是精确相等,所以它们被视为两个值。
|
||||
上面代码表示,由于两个空对象不相等,所以它们被视为两个值。
|
||||
|
||||
### Set实例的属性和方法
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user