ES6变量解构赋值的用法
一、数组赋值(从数组中提取值,按照对应位置,对变量赋值)
1. 完全解构(变量与值数目相等)
let arr = [1, 2, 3];
let [a,b,c] = arr;
console.log(a, b, c); // 1 2 3
2. 不完全解构(变量的数目小于值的数目)
let arr = [1, 2, 3, 4];
let [a,b,c] = arr;
console.log(a, b, c); // 1 2 3
3. 解构不成功(变量的数目大于值的数目)
let arr = [1, 2];
let [a,b,c] = arr;
console.log(a, b, c); // 1 2 undefined
备注:以上三种情况都可以给变量赋上值。
4. 默认值
默认值生效的条件是,变量严格等于undefined
。
let arr = [1, 2];
let [a,b,c = 3] = arr;
console.log(a, b, c); // 1 2 3
let arr = [1, 2, undefined];
let [a,b,c = 3] = arr;
console.log(a, b, c); // 1 2 3
let arr = [1, 2, null];
let [a,b,c = 3] = arr;
console.log(a, b, c); // 1 2 null
如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。
function fun () {
console.log(1);
}
let [x = fun()] = [1];
console.log(x); // 1
// fun不会执行
function fun () {
console.log('hhhhhhhhhhh');
}
let [x = fun()] = [undefined];
console.log(x); // hhhhhhhhhhh undefined
// fun会执行
5. 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
let [x = 1, y = x] = []; // x=1; y=1
let [x = 1, y = x] = [2]; // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = []; // y is not defined
二、对象的解构赋值(数组是按顺序,但是对象直接赋值需要按属性名来赋值)
1. 变量名即是属性名
let obj = {
name: 'lqw',
age: 23
};
let {name, age} = obj;
console.log(name, age); // lqw 23
2. 变量名不是属性名
let obj = {
name: 'lqw',
age: 23
};
let {name:a, age:b} = obj;
console.log(a, b); // lqw 23
其实对象的赋值是下面形式的简写(对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。)
let {name: a, age: b} = {name: 'lqw', age: 23};
console.log(a, b); // lqw 23
三、字符串解构赋值
let [a, b, c] = 'lqw';
console.log(a, b, c); // l q w
四、数值和布尔值的解构赋值
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
let {toString: s} = 123;
s === Number.prototype.toString // true let {toString: s} = true;
s === Boolean.prototype.toString // true
上面代码中,数值和布尔值的包装对象都有toString
属性,因此变量s
都能取到值。
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined
和null
无法转为对象,所以对它们进行解构赋值,都会报错。
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError
五、函数参数的解构赋值
function add([x, y]){
return x + y;
} add([1, 2]); //
参考链接:http://es6.ruanyifeng.com/#docs/destructuring
ES6变量解构赋值的用法的更多相关文章
- ES6变量解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构ES6之前我们申明多个变量需要按照下面的方法: let l a=1; let b=2; let c=3; let d=4; ...
- es6变量解构赋值的用途
这里是我觉得es6解构赋值,在平时我们写js的时候非常有用,而且经常用到的地方,能简化我们的代码,让写代码简介优雅易读; 用途 1.交换变量的值,太方便了这逼,写法不仅简介而且一看就明白 let [x ...
- ES6的变量解构赋值
前 言 ES6 解构赋值: ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构. 1.1 数组的结构赋值 1.1.1基本用法 JS中,为变量赋值直接指定.例如下面代码: ...
- Es6 新增解构赋值
1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 要想实现解构,就必须是容器,或者具有可遍历的接口. 以前,为 ...
- ES6 之 解构赋值
本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中变量的解构赋值. 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这 ...
- ECMAScript6学习笔记 ——let、const、变量解构赋值
let 不存在变量提升 通过let声明的变量仅在块级作用域内有效 不允许在同一个作用域内重复声明一个变量 防止值公用 var oUl = document.querySelectorAll('ul&g ...
- ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...
- ES6解构赋值常见用法
解构赋值出现的契机: let obj = { a: 1, b: 2 } // 取值 let a = obj.a let b = obj.b 问题核心: 每次取值既要确定对象属性名,还得重新定义一个变量 ...
- 【es6】变量解构赋值
1.数组解构赋值 let [a,b,c]=[1,2,3];//数组解构赋值,注意:左右两边格式需一致 let [a,b]=[1,2,3];//不完全解构,取位置靠前的值 let [a=1,b]=[un ...
随机推荐
- ios代码大全
http://blog.csdn.net/kepoon/article/details/7763106
- C 语言实例 - 从文件中读取一行
C 语言实例 - 从文件中读取一行 从文件中读取一行. 文件 runoob.txt 内容: $ cat runoob.txt runoob.com google.com 实例 #include < ...
- Java | 基础归纳 | JPA
https://www.javacodegeeks.com/2015/04/jpa%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B.html JPA 全称====>Jav ...
- tracert查网络问题
tracert命令的格式为:tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] ...
- Python 数字模块
Python中的数字模块 math模块 random模块 Decimal模块 - 没有损失的小数 Fraction模块 - 可以计算分数
- 转 造成ORA-01843 无效的月份的一些原因
- 牛客网Java刷题知识点之Java集合类里面最基本的接口有哪些
不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?tpId=31&tqId=21086&query=&asc= ...
- json_encode 中文处理
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存储格式. ...
- CSS3在hover下的几种效果
CSS3在hover下的几种效果代码分享,CSS3在鼠标经过时的几种效果集锦 效果一:360°旋转 修改rotate(旋转度数) * { transition:All 0.4s ease-in-out ...
- 基于Java实现的插入排序算法
简述 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常 ...