ES6_入门(5)_解构赋值
学习参考:http://es6.ruanyifeng.com/#docs/destructuring
//2017/7/20
/*对象的解构赋值*/
//对象的解构赋值,当变量名的对象的属性名相同时,才能取到正确的值。
/**/
let {foo,bar}={foo:"aaa",bar:"bbb"};
console.log(foo);//aaa
console.log(bar);//bbb //变量名与属性名不相同,必须写成下面这样
/**/
var {foo:baz}={foo:'aaa',bar:'bbb'};
console.log(baz);//aaa
console.log(foo);//es6.html:701 Uncaught ReferenceError: foo is not defined //对象的解构赋值是下面形式的简写.对象的结果赋值的内部机制,是先找到同名属性,然后在赋给对应的变量。真正被赋值的是后者,而不是前者。
/**/
let{foo:foo,bar:bar}={foo:'aaa',bar:'bbb'}; let obj={
p:[
'Hello',
{y:'world'}
]
}; let{p:[x,{y}]}=obj;
console.log(p);//es6.html:714 Uncaught ReferenceError: p is not defined。注意:这里p是模式,不是变量,因此不会被赋值。
console.log(x);//Hello
console.log(y);//world //如果想要p被赋值,可以写成下面的形式
/**/
let obj={
p:[
'Hello',
{y:'world'}
]
}; let{p,p:[x,{y}]}=obj;
console.log(p);//["Hello", Object]
console.log(x);
console.log(y); /**/
var node={
loc:{
start:{
line:1,
colum:5
}
}
};
var {loc,loc:{start},loc:{start:{line}}}=node;
console.log(loc);//Object {start: Object}
console.log(start);//Object {line: 1, colum: 5}
console.log(line);//1。这里对line的属性的解构赋值,只有line是变量,loc和start都是模式,不是变量。 //对象解构指定默认值的条件是,对象的属性值严格等于undefined。
/**/
console.log(null==undefined);//true
console.log(null===undefined);//false var {x=3}={x:undefined};
console.log(x);// var {y=5}={y:null};
console.log(y);//null //解构失败,对象的值等于undefined。
/**/
let {foo}={bar:2};
console.log(foo);//undefined /*注意*/
/**/
let x;
{x}={x:1};//es6.html:763 Uncaught SyntaxError: Unexpected token =
/*上面代码报错的原因是JavaScript引擎会将{x}理解成一个代码块,从而发生语法错,所以以下代码将整个解构赋值语句,放在圆括号里,可以正确执行。*/
/**/
let x;
({x}={x:2});
console.log(x);// //字符串解构赋值
/**/
const [a,b,c,d,e]='hello';
console.log(e);//o let {length:len}='hello';
console.log(len);//5 /*解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。*/
/**/
let{prop:x}=undefined;
let{prop:y}=null;//es6.html:779 Uncaught TypeError: Cannot match against 'undefined' or 'null'. /*以下三种解构赋值不能使用圆括号*/
//(1)变量声明语句
//(2)函数参数,函数参数也属于变量声明,因此不能带有圆括号。
//(3)赋值语句的模式。不能将整个模式或是部分模式放在圆括号中。 /*可以使用圆括号的情况:赋值语句的非模式部分*/
/**/
let x=1;
let y=2;
[x,y]=[y,x];
console.log(x);//
console.log(y);//
ES6_入门(5)_解构赋值的更多相关文章
- ECMAScript 6入门 - 变量的解构赋值
定义 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构赋值不仅适用于var命令,也适用于let和const命令. 解构赋值的规则是,只要 ...
- es6入门2--对象解构赋值
解构赋值:ES6允许按照一定规则从数组或对象中提取值,并对变量进行赋值.说直白点,等号两边的结构相同,右边的值会赋给左边的变量. 一.数组的解构赋值: 1.基本用法 let [a, b, c] = [ ...
- ES6入门——变量的解构赋值
1.数组的解构赋值 以前为变量复制,只能直接指定值.现在ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 本质上,这种写法属于模式匹配,只要等 ...
- es6基础入门变量的解构赋值
let [a, b, c] = [1, 2, 3]; let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar baz let [ , , third] = [ ...
- ES6 学习笔记 - 变量的解构赋值
变量的解构赋值 学习资料:ECMAScript 6 入门 数组的解构赋值 基本用法 可以从数组中提取值,按照对应位置,对变量赋值.这种写法属于"模式匹配". let [a, b, ...
- ES6_入门(4)_数组的解构赋值
//2017/7/14 //变量的解构赋值(解构:Destructuring) //(1)数组的解构赋值 let [a,b,c]=[1,2,3];//模式匹配,只要等号两边的模式相同,左边的变量就会被 ...
- ES6入门之变量的解构赋值(二)
前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...
- ECMA Script 6_解构赋值_模式匹配
解构赋值 从数组中提取值,按照对应位置,对变量赋值 只要等号右边的值不是对象或数组,就先将其转为对象. 由于 undefined 和 null 无法转为对象,所以对它们进行解构赋值,都会报错 let ...
- ECMAScript6 入门教程记录 变量的解构赋值
(1)变量的解构赋值 基本用法:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; let c = ...
随机推荐
- Spring Boot JPA的Column Table 注解命名字段无效
@Table(name = "OrderInfo") @Entity public class OrderInfo { @Id @GeneratedValue private Lo ...
- 伪分布式hbase2.6.5和hbase1.1.2的配置
1.注意hadoop和hbase的版本兼容问题 目前测试用:hadoop 2.6.5 Hbase 1.1.2 2.创建hadoop用户 Sudo useradd –m hadoop –s /bin/ ...
- BZOJ2212 [Poi2011]Tree Rotations 线段树合并 逆序对
原文链接http://www.cnblogs.com/zhouzhendong/p/8079786.html 题目传送门 - BZOJ2212 题意概括 给一棵n(1≤n≤200000个叶子的二叉树, ...
- P1330 封锁阳光大学 DFS
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- P1233 木棍加工 dp LIS
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...
- day30 网络编程 之进程,线程,协程
进程点进去 线程点进去 协程点进去 什么是进程 进程(有时称为重量级进程)是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.同一个程序执行两次,属于是两个不 ...
- C++中全排列算法函数next_permutation的使用方法
首先,先看对next_permutation函数的解释: http://www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_ ...
- CodeForces 161D Distance in Tree【树形DP】
<题目链接> 题目大意:一颗无向无环树,有n个顶点,求其中距离为k的点对数是多少,(u,v)与(v,u)为同一点对. #include <cstdio> #include &l ...
- POJ-1679 The Unique MST (判断最小生成树的唯一性)
<题目链接> 题目大意: 给定一张无向图,判断其最小生成树是否唯一. 解题分析: 对图中每条边,扫描其它边,如果存在相同权值的边,则标记该边:用kruskal求出MST. 如果MST中无标 ...
- switch反汇编
以下总结为debug模式