1
0
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:
ruanyf 2015-12-27 21:44:27 +08:00
parent 769ef139b1
commit aa7a6ac005
2 changed files with 18 additions and 3 deletions

View File

@ -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')

View File

@ -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实例的属性和方法