进军es6(2)---解构赋值
本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久。目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需要加快步伐掌握它,跟上前端改革的潮流。
上一篇大概提到了es6的一些变量声明基础,可能是有些乏味的,但今天所讲可能是在别的语言中都不存在的一种语法现象。它就是今天的主人公"解构赋值"。
解构赋值
es6代码可以在babel官网编写执行 -> http://babeljs.io/repl/
何为解构赋值,第一次听到这个名字,我也是相当陌生的。先分析一个小栗子:
//es5
var a = 1, b = 2, c = 3;
//es6
let [a, b, c] = [1, 2, 3];
这样看起来就很好理解了,解构赋值就是指从数组和对象中提取值,对变量进行赋值。解构可以理解为将对象的结构进行解析,并把值赋给声明的变量。不光是数组,在别的数据类型中也可以见到解构赋值的身影。
对象:
let {a, b} = {a : 'one', b: 'two'};
//a = one, b = two
字符串:
const [a, b, c, d, e] = 'apple';
//a='a',b='p'...
在函数的参数中:
function test({x, y} = {x:0, y: 1}) { return [x, y]; }
test(); // [0,1]
test({}); // [undefined, undefined]
test({a: 2, b: 3}); // [2, 3]
对解构赋值的写法有了大致了解后,我们接着研究下它的用途。
1.交换变量值
[x, y] = [y, x],千万不要以为这个是 x= y; y =x。在es6解析后会产生一个中间变量(babel上显示的是一个数组),所以是可以用作交换变量写法的。
2.函数参数无序定义以及默认值
使用自定义函数的时候,偶尔会记不准确函数参数的顺序以及个数。同样可以利用解构的方法进行参数定义:
// 无序定义
function f({x, y, z, a}) {};
f({a: 1, y:2, z:3, x: 4});
// 默认定义
function f({x, y, z, a=1})();
f({}); // x=undefined, y=undefined,z=undefined,a=1
3.提取JSON对象,可过滤信息
var jsonData = {a:1,b:2,c:[3,4]};
let {a,c} = jsonData;
4.提取模块中的方法或函数
import React, {Component, PropTypes} from 'react';
解构赋值在es6中是很简单的语法,如果还觉得很陌生,那一定要去babel上面多写写。
进军es6(2)---解构赋值的更多相关文章
- ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...
- ES6之解构赋值
截止到ES6,共有6种声明变量的方法,分别是var .function以及新增的let.const.import和class: 我们通常的赋值方法是: var foo='foo'; function ...
- es6的解构赋值学习(1)
相对es5的简单的"="赋值来说,es6增加了一种新的赋值模式--解构赋值,按照它的规则,可以从数组和对象中提取值来对变量进行赋值,个人觉得方便了很多,但是这个模式有点恶心人,相比 ...
- Es6 新增解构赋值
1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 要想实现解构,就必须是容器,或者具有可遍历的接口. 以前,为 ...
- ES6 之 解构赋值
本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中变量的解构赋值. 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这 ...
- ES6变量解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构ES6之前我们申明多个变量需要按照下面的方法: let l a=1; let b=2; let c=3; let d=4; ...
- es6变量解构赋值的用途
这里是我觉得es6解构赋值,在平时我们写js的时候非常有用,而且经常用到的地方,能简化我们的代码,让写代码简介优雅易读; 用途 1.交换变量的值,太方便了这逼,写法不仅简介而且一看就明白 let [x ...
- 粗看ES6之解构赋值
标签: javascript es6 什么是解构赋值? 示例如下: <!DOCTYPE html> <html> <head> <meta charset=& ...
- ES6变量解构赋值的用法
一.数组赋值(从数组中提取值,按照对应位置,对变量赋值) 1. 完全解构(变量与值数目相等) let arr = [1, 2, 3]; let [a,b,c] = arr; console.log(a ...
随机推荐
- 解码一个加密的js文件
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- SQL优化(2)
建表时候数据库引擎的选择也可以达到优化的效果 InnoDB: 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB MyISAM: ...
- github 查看单个文件的历史记录命令
gitk 安装: apt-get install gitk 点击打开链接http://stackoverflow.com/questions/278192/view-the-change-histor ...
- shell实现查询oracle数据库表,并写到本地txt文件
1.表结构 create table t_student( id ) primary key, name ), birthday date ); increment ; insert into t_s ...
- compass sprite
1.compass init 初始化一个compass项目,并创建一个images文件夹用来存放合成的sprite图 2.将切好的小图放到images文件夹中 3.在sass文件夹中新建一个test. ...
- jquery tab mouseover 特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- AS3.0的动态类和密封类
动态类:生成的实例可以在运行时动态添加属性和方法.类名前有dynamic就是动态类 密封类:生成的实例不可以在运行时动态添加属性和方法
- 【 java版坦克大战--事件处理】 让坦克动起来--事件处理的准备
要能够控制坦克运动,必须用到事件处理的知识. 事件处理的一个demo. /** * 事件处理机制:委派事件模型.指当事件发生的时候,产生事件的对象(事件源),会把此 * "消息"传 ...
- 安装 SQL Server 2012 的硬件和软件要求(官方全面)
以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. 有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参阅硬件和软件要求(S ...
- ubuntu杂记
安装ssh: sudo apt-get install openssh-server sudo /etc/init.d/ssh start 将主机中vmware8的网络改为自动获取ip,就可以ping ...