对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
例一:
对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
注意:对 所有的对象 进行解构赋值的时候,你如果要将对象中的某个方法 进行解构,你解构的时候,起的变量名,必须和对象里的方法名一一对应上。
对象: 属性 + 方法
对象的解构赋值 ,要么解构对象里的属性,要么解构对象里的方法
round() --- 解构对象中的方法,也就是 把这个方法 拿出来,我要用
PI --- 解构对象中的属性,也就是 把这个属性 拿出来,我要用
- {
- console.dir(Math)
- // 对象的解构赋值
- const {PI} = Math;
- // 将Math对象的对数、正弦、余弦、四舍五入 四个方法,赋值到对应的变量上,使用起来就会方便很多
- let {log, sin, cos,round} = Math;
- console.log(PI);
-
- console.log(sin(30));
-
- console.log(round(9.6));
-
- }
console输出效果
例二:
- {
- // 对象的解构赋值
- console.dir(console);
- let {log, info, table} = console;
-
- // 使用起来就会方便很多
- log('你好,小张')
- info('小史你好')
- table([[100,200],[300,400]])
-
- table(
- [
- {id:1,name:'小卢',sex:'男'},
- {id:2,name:'小王',sex:'男'},
- {id:2,name:'小商',sex:'男'}
- ]
- )
-
- }
console输出效果
上面代码的例一将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log赋值到log变量。
如果变量名与属性名不一致,必须写成下面这样。
- let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
- baz // "aaa"
-
- let obj = { first: 'hello', last: 'world' };
- let { first: f, last: l } = obj;
- f // 'hello'
- l // 'world'
这实际上说明,对象的解构赋值是下面形式的简写。
let { foo: foo, bar: bar } = { foo: 'aaa', bar: 'bbb' };
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
- let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
- baz // "aaa"
- foo // error: foo is not defined
上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。