ES6-其他数据类型的解构赋值
一.字符串的解构赋值
1.以数组形式解构赋值
const [a, , , b, c] = 'hello'; console.log(a, b, c);//h l o
2.以对象形式解构赋值(将字符串自动转换为对象,底层是用new String()转对象,底层不会通过new Object()形式转)
// 为什么字符串可以按照对象形式解构赋值 因为包装类,任何一个直接写的字符串都相当于是new String()出来的:打印str如图 //const str = 'hello'//等价于下面
const str = new String('hello'); console.log(str); const { 0: a, 1: b, length } = str;//解构赋值
console.log('hello'.hasOwnProperty('length'));//true 字符串本身就有length属性 console.log(a, b,length);//h e 5
打印str:{0:'h',1:'e',2:'l',3:'l',4:'o',length:5}
这也可以解释字符串可以通过str[序号]访问字符

二.数值和布尔值的解构赋值:(将数值,布尔自动转换为对象,底层是用new Number()和new Boolean()转,底层不会通过new Object()形式转)
const { hasOwnProperty, toString } = true;//相当于以下
// const {hasOwnProperty,toString} = new Boolean(true);//程序内部会自动把true转为对象 对象的解构赋值是可以取到继承的属性(其原型链上所有原型的属性和方法)
console.log(new Boolean(true));
console.log(hasOwnProperty);//ƒ hasOwnProperty()
console.log(toString);//toString()
打印new Boolean(true),它本身什么属性都没有,相当于一个空对象;

三角关系:

数值型同理,就不一一举例;
三.undefined和null没有包装类,无法转为对象(底层不会通过new Object()形式转),没有三角关系原型链,也不能对其以数组、对象形式的解构赋值会报错;
四.解构赋值的实际应用
函数返回多个值一般用数组或者对象,再用解构赋值可以方便取出里面的值;
浙公网安备 33010602011771号