@@ -488,8 +488,8 @@ let { x, y, ...z } = undefined; // 运行时错误
488488解构赋值必须是最后一个参数,否则会报错。
489489
490490``` javascript
491- let { ... x, y, z } = obj ; // 句法错误
492- let { x, ... y, ... z } = obj ; // 句法错误
491+ let { ... x, y, z } = someObject ; // 句法错误
492+ let { x, ... y, ... z } = someObject ; // 句法错误
493493```
494494
495495上面代码中,解构赋值不是最后一个参数,所以会报错。
571571// {0: "a", 1: "b", 2: "c"}
572572```
573573
574+ 如果扩展运算符后面是一个空对象,则没有任何效果。
575+
576+ ``` javascript
577+ {... {}, a: 1 }
578+ // { a: 1 }
579+ ```
580+
581+ 如果扩展运算符后面不是对象,则会自动将其转为对象。
582+
583+ ``` javascript
584+ // 等同于 {...Object(1)}
585+ {... 1 } // {}
586+ ```
587+
588+ 上面代码中,扩展运算符后面是整数` 1 ` ,会自动转为数值的包装对象` Number{1} ` 。由于该对象没有自身属性,所以返回一个空对象。
589+
590+ 下面的例子都是类似的道理。
591+
592+ ``` javascript
593+ // 等同于 {...Object(true)}
594+ {... true} // {}
595+
596+ // 等同于 {...Object(undefined)}
597+ {... undefined } // {}
598+
599+ // 等同于 {...Object(null)}
600+ {... null} // {}
601+ ```
602+
603+ 但是,如果扩展运算符后面是字符串,它会自动转成一个类似数组的对象,因此返回的不是空对象。
604+
605+ ``` javascript
606+ {... ' hello' }
607+ // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
608+ ```
609+
574610对象的扩展运算符等同于使用` Object.assign() ` 方法。
575611
576612``` javascript
@@ -655,19 +691,6 @@ const obj = {
655691};
656692```
657693
658- 如果扩展运算符后面是一个空对象,则没有任何效果。
659-
660- ``` javascript
661- {... {}, a: 1 }
662- // { a: 1 }
663- ```
664-
665- 如果扩展运算符的参数是` null ` 或` undefined ` ,这两个值会被忽略,不会报错。
666-
667- ``` javascript
668- let emptyObject = { ... null, ... undefined }; // 不报错
669- ```
670-
671694扩展运算符的参数对象之中,如果有取值函数` get ` ,这个函数是会执行的。
672695
673696``` javascript
0 commit comments