1、解构还可以用于对象
- <script>
- let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
- console.log(foo)//aaa
- console.log(bar)//bbb
- script>
2、对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
- <script>
- let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
- console.log(foo)//aaa
- console.log(bar)//bbb
- script>
3、变量没有对应的同名属性,导致取不到值,最后等于undefined,解构失败=变量=undefined
- <script>
- let { baz } = { foo: 'aaa', bar: 'bbb' };
-
- console.log(baz)//undefined
-
- script>
4、利用 解构赋值可以将现有对象的方法,赋值到某个变量:只要此变量名和属性相同
4.1的Math对象中保存的内容赋值给变量名与其属性相同 进行接收
- <script>
- let { log, sin, cos,PI} = Math;
-
- console.log(sin(30))
- console.log(PI)
- script>

4.2、console的属性log赋值给log相同变量名接收 控制台打印输出可以直接使用log
- <script>
- const { log } = console;
- log('你好')
- script>

5、如果想要接收的变量名与对象的属性不一致 :后面的是变量
- <script>
- let { foo: c } = { foo: 'aaa', bar: 'bbb' };
- console.log(c)//aaa
- script>
- <script>
- let obj = { first: 'hello', last: 'world' };//对象
- let { first: a, last: b } = obj;
- console.log(a)//hello
- console.log(b)//world
- script>
6、所以前面使用与属性相同的变量名的时候实际上是简写形式()实际上是对象和属性同名-只写一个
- <script>
- let { foo} = { foo: 'aaa', bar: 'bbb' };
- //等价于
- //let { foo :foo} = { foo: 'aaa', bar: 'bbb' };
-
- console.log(foo)//aaa
-
- script>
-
7、对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量a:b=>前者是匹配模式,后者是变量,真正被赋值的是变量,而不是模式
8、解构可以用于嵌套结构的对象
-
- <script>
- let obj = { p: ['Hello',{ y: 'World' }] };//ObJ变量
- //p属性 后面的是值
- let { p: [x, { y:a }] } = obj;
- //p是模式:xy是变量
- console.log(x) // "Hello"
- console.log (a) // "World"
- script>
如果需要将模式作为变量进行赋值
- <script>
- let obj = { p: ['Hello',{ y: 'World' }] };//ObJ变量
- //p属性 后面的是值
- let { p,p: [x, { y:a }] } = obj;
- //p是模式:xy是变量
- console.log (p) // "World"
- script>