重走es6之es6解构

解构

Es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值,如果解构不成功,变量的值就等于undefined。

数组解构

等号左边的变量放到中括号内部,匹配右侧数组中的元素。
实例:
完全解构

//数组解构之完全解构
let [a, b, c, d, e] = [1, 2, 3, 4, 5, 6]
console.log(a, b, c, d, e); //结果为1 2 3 4 5

不完全解构

//数组解构之不完全解构
let [a,[b],d]=[1,[2,3],4];
console.log(a,b,d)   //结果为1,2,4

集合解构

//数组解构之集合解构
let [head,...tail]=[1,2,3,4]
console.log(head,tail); //结果为head=1;tail=[2,3,4]

默认值
当匹配值严格等于undefined时,默认值生效

//数组解构之默认值
let [x,y='b']=['a']
console.log(x,y)   //结果为x='a';y='b'
//默认值也可以为一个函数
function f(){
   return 2
}
let [m,n=f()]=[1];
console.log(m,n)   //结果为1,2

对象解构

等号左边的变量放在大括号的内部,匹配右侧对象中的元素。对象的属性没有次序,变量必须与属性同名,才能取得正确的值

变量与属性同名时

//变量与属性同名时
let { foo, bar } = { foo:'aaa', bar: 'bbb' };
console.log(foo,bar)  //结果为aaa,bbb

变量与属性不同名时,要想取到值,必须写成下面的形式

//变量与属性不同名
var { foo: baz } = { foo: 'aaa', bar: 'bbb' }; 
console.log(baz)  //结果为baz='aaa' 而foo为undefined

let { foo: a, bar: b } = { foo: "aaa", bar: "bbb" };
console.log(a,b); 结果为a='aaa',b='bbb'

从上述代码中,我们可以知道对象的解构赋值是下面形式的简写:

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };
console.log(foo,bar) //结果为foo='aaa',bar='bbb'

嵌套解构

//对象解构之嵌套解构
let obj = { p: [ 'Hello', { y: 'World' } ] }; 
let { p: [x, { y }] } = obj; 
console.log(x,y); //结果为//x = "Hello”; y = "World”

默认值
默认值生效的条件是,对象的属性值严格等于undefined

//对象解构之默认值
let {x:y=3}={}  
console.log(y)  //结果为3

字符串解构

等号左边的变量如果放在中括号内进行的类似于数组解构,从字符串中获取指定字符;如果放在大括号内进行的类似于对象解构,从实例属性获取方法中解构

//字符串解构 
const [a, b, c, d, e] = 'hello'; //a=h;b=e;c=l;d=l;e=o
console.log(a,b,c,d,e) //结果为h,e,l,l,o
let {length : len, toString } = 'hello'; 
console.log(len); //结果为len = 5

let { toString, valueOf, length } = "hello"
//结果为[Function: toString] [Function: valueOf] 5
console.log(toString, valueOf, length);  
 //结果为true
console.log(toString === String.prototype.toString);

数值解构

等号左边的变量放在大括号中进行解构,可以获取到数值包装器构造函数原型中指定的方法

let {valueOf} = 12; 
console.log(valueOf) //结果为 Number.prototype.valueOf

布尔类型解构

等号左边的变量放在大括号中进行解构,可以获取到布尔包装器构造函数原型中指定的方法

//布尔类型解构
let {valueOf} = true; 
console.log(valueOf)  //Boolean.prototype.valueOf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值