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 显示当前系统时间代码
Dec 28 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
Bootstrap Search Suggest使用例子
Dec 21 Javascript
原生js实现图片放大缩小计时器效果
Jan 20 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 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实现取得HTTP请求的原文
2014/08/18 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
PHP 验证登陆类分享
2015/03/13 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
制作部班长职位说明书
2014/02/26 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
通知书大全
2015/04/27 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
python如何读取和存储dict()与.json格式文件
2022/06/25 Python