我是靠谱客的博主 潇洒嚓茶,最近开发中收集的这篇文章主要介绍ES6_入门(5)_解构赋值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习参考:http://es6.ruanyifeng.com/#docs/destructuring


1
//2017/7/20

2
/*对象的解构赋值*/

3
//对象的解构赋值,当变量名的对象的属性名相同时,才能取到正确的值。

4
/*1*/

5
let {foo,bar}={foo:"aaa",bar:"bbb"};

6
console.log(foo);//aaa

7
console.log(bar);//bbb

8

9
//变量名与属性名不相同,必须写成下面这样
 10
/*2*/
 11
var {foo:baz}={foo:'aaa',bar:'bbb'};
 12
console.log(baz);//aaa
 13
console.log(foo);//es6.html:701 Uncaught ReferenceError: foo is not defined
 14
 15
//对象的解构赋值是下面形式的简写.对象的结果赋值的内部机制,是先找到同名属性,然后在赋给对应的变量。真正被赋值的是后者,而不是前者。
 16
/*3*/
 17
let{foo:foo,bar:bar}={foo:'aaa',bar:'bbb'};
 18
 19
let obj={
 20 
p:[
 21
'Hello',
 22
{y:'world'}
 23 
]
 24 
};
 25
 26
let{p:[x,{y}]}=obj;
 27
console.log(p);//es6.html:714 Uncaught ReferenceError: p is not defined。注意:这里p是模式,不是变量,因此不会被赋值。
 28
console.log(x);//Hello
 29
console.log(y);//world
 30
 31
//如果想要p被赋值,可以写成下面的形式
 32
/*4*/
 33
let obj={
 34 
p:[
 35
'Hello',
 36
{y:'world'}
 37 
]
 38 
};
 39
 40
let{p,p:[x,{y}]}=obj;
 41
console.log(p);//["Hello", Object]
 42 
console.log(x);
 43 
console.log(y);
 44
 45
/*5*/
 46
var node={
 47 
loc:{
 48 
start:{
 49
line:1,
 50
colum:5
 51 
}
 52 
}
 53 
};
 54
var {loc,loc:{start},loc:{start:{line}}}=node;
 55
console.log(loc);//Object {start: Object}
 56
console.log(start);//Object {line: 1, colum: 5}
 57
console.log(line);//1。这里对line的属性的解构赋值,只有line是变量,loc和start都是模式,不是变量。
 58
 59
//对象解构指定默认值的条件是,对象的属性值严格等于undefined。
 60
/*6*/
 61
console.log(null==undefined);//true
 62
console.log(null===undefined);//false
 63
 64
var {x=3}={x:undefined};
 65
console.log(x);//3
 66
 67
var {y=5}={y:null};
 68
console.log(y);//null
 69
 70
 71
//解构失败,对象的值等于undefined。
 72
/*7*/
 73
let {foo}={bar:2};
 74
console.log(foo);//undefined
 75
 76
 77
/*注意*/
 78
/*8*/
 79 
let x;
 80
{x}={x:1};//es6.html:763 Uncaught SyntaxError: Unexpected token =
 81
/*上面代码报错的原因是JavaScript引擎会将{x}理解成一个代码块,从而发生语法错,所以以下代码将整个解构赋值语句,放在圆括号里,可以正确执行。*/
 82
/*9*/
 83 
let x;
 84
({x}={x:2});
 85
console.log(x);//2
 86
 87
//字符串解构赋值
 88
/*10*/
 89
const [a,b,c,d,e]='hello';
 90
console.log(e);//o
 91
 92
let {length:len}='hello';
 93
console.log(len);//5

 94
 95
 96
/*解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。*/
 97
/*11*/
 98
let{prop:x}=undefined;
 99
let{prop:y}=null;//es6.html:779 Uncaught TypeError: Cannot match against 'undefined' or 'null'.
100
101
/*以下三种解构赋值不能使用圆括号*/
102
//(1)变量声明语句
103
//(2)函数参数,函数参数也属于变量声明,因此不能带有圆括号。
104
//(3)赋值语句的模式。不能将整个模式或是部分模式放在圆括号中。
105
106
/*可以使用圆括号的情况:赋值语句的非模式部分*/
107
/*12*/
108
let x=1;
109
let y=2;
110
[x,y]=[y,x];
111
console.log(x);//2
112
console.log(y);//1

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

最后

以上就是潇洒嚓茶为你收集整理的ES6_入门(5)_解构赋值的全部内容,希望文章能够帮你解决ES6_入门(5)_解构赋值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部