es6学习之解构时应该注意的点


Posted in Javascript onAugust 29, 2017

前言

本文主要给大家介绍了关于在es6解构时需要注意的一些事项,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

// 正确的写法
let x;
({x} = {x: 1});

如果变量名与属性名不一致,必须写成下面这样。

var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"

let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'
//这实际上说明,对象的解构赋值是下面形式的简写
let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };

也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined
let obj = {
 p: [
 'Hello',
 { y: 'World' }
 ]
};

let { p: [x, { y }] } = obj;
x // "Hello"
y // "World"

注意:这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样。

let obj = {
 p: [
 'Hello',
 { y: 'World' }
 ]
};

let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

函数的参数也可以使用解构赋值。

function add([x, y]){
 return x + y;
}

add([1, 2]); // 3

上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻,数组参数就被解构成变量x和y。对于函数内部的代码来说,它们能感受到的参数就是x和y

undefined就会触发函数参数的默认值。

[1, undefined, 3].map((x = 'yes') => x);
// [ 1, 'yes', 3 ]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript为对象原型prototype添加属性的两种方式
Aug 01 Javascript
jQuery实现动画效果的实例代码
May 07 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
Jun 14 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
Jquery多选框互相内容交换的实例代码
Jul 04 Javascript
js 左右悬浮对联广告特效代码
Dec 12 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
May 18 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
vue实现图书管理demo详解
Oct 17 Javascript
layui form表单提交之后重新加载数据表格的方法
Sep 11 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 #Javascript
详谈Node.js之操作文件系统
Aug 29 #Javascript
js链表操作(实例讲解)
Aug 29 #Javascript
在页面中引入js的两种方法(推荐)
Aug 29 #Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 #Javascript
使用canvas进行图像编辑的实例
Aug 29 #Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 #jQuery
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
初识Laravel
2014/10/30 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
angular.bind使用心得
2015/10/26 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
vue中axios封装使用的完整教程
2021/03/03 Vue.js
在Django中同时使用多个配置文件的方法
2015/07/22 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python频繁写入文件时提速的方法
2019/06/26 Python
Python实现微信好友的数据分析
2019/12/16 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
几道PHP的面试题
2012/05/19 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
研究生自我鉴定范文
2013/10/30 职场文书
工作态度检讨书
2014/02/11 职场文书
公安学专业求职信
2014/07/27 职场文书