1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

docs(object): edit spread operator

This commit is contained in:
ruanyf 2018-12-26 11:33:44 +08:00
parent 7397a7ad6a
commit 52bca44c4c

View File

@ -488,8 +488,8 @@ let { x, y, ...z } = undefined; // 运行时错误
解构赋值必须是最后一个参数,否则会报错。
```javascript
let { ...x, y, z } = obj; // 句法错误
let { x, ...y, ...z } = obj; // 句法错误
let { ...x, y, z } = someObject; // 句法错误
let { x, ...y, ...z } = someObject; // 句法错误
```
上面代码中,解构赋值不是最后一个参数,所以会报错。
@ -571,6 +571,42 @@ foo
// {0: "a", 1: "b", 2: "c"}
```
如果扩展运算符后面是一个空对象,则没有任何效果。
```javascript
{...{}, a: 1}
// { a: 1 }
```
如果扩展运算符后面不是对象,则会自动将其转为对象。
```javascript
// 等同于 {...Object(1)}
{...1} // {}
```
上面代码中,扩展运算符后面是整数`1`,会自动转为数值的包装对象`Number{1}`。由于该对象没有自身属性,所以返回一个空对象。
下面的例子都是类似的道理。
```javascript
// 等同于 {...Object(true)}
{...true} // {}
// 等同于 {...Object(undefined)}
{...undefined} // {}
// 等同于 {...Object(null)}
{...null} // {}
```
但是,如果扩展运算符后面是字符串,它会自动转成一个类似数组的对象,因此返回的不是空对象。
```javascript
{...'hello'}
// {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
```
对象的扩展运算符等同于使用`Object.assign()`方法。
```javascript
@ -655,19 +691,6 @@ const obj = {
};
```
如果扩展运算符后面是一个空对象,则没有任何效果。
```javascript
{...{}, a: 1}
// { a: 1 }
```
如果扩展运算符的参数是`null``undefined`,这两个值会被忽略,不会报错。
```javascript
let emptyObject = { ...null, ...undefined }; // 不报错
```
扩展运算符的参数对象之中,如果有取值函数`get`,这个函数是会执行的。
```javascript