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:
parent
7397a7ad6a
commit
52bca44c4c
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user