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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
JS保存、读取、换行、转Json报错处理方法
Jun 14 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
Aug 26 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
vue实现全匹配搜索列表内容
Sep 26 Javascript
浅谈layui 表单元素的选中问题
Oct 25 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 Javascript
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
页面缩放兼容性处理方法(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
模仿OSO的论坛(三)
2006/10/09 PHP
php查询whois信息的方法
2015/06/08 PHP
php递归实现无限分类的方法
2015/07/28 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
法务专员岗位职责
2014/01/02 职场文书
党员教师工作决心书
2014/03/13 职场文书
艺术教育实施方案
2014/05/03 职场文书
团支部推优材料
2014/05/21 职场文书
护士节活动总结
2014/08/29 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
2015年社区工作总结
2015/04/08 职场文书