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 相关文章推荐
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 Javascript
Ionic默认的Tabs模板使用实例
Aug 29 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
CSS3+JavaScript实现翻页幻灯片效果
Jun 28 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
深入了解js原型模式
May 30 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
javascript 闭包疑问
2010/12/30 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
教育课题研究自我鉴定范文
2013/12/28 职场文书
中班中秋节活动反思
2014/02/18 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
环保倡议书500字
2014/05/15 职场文书
工程售后服务承诺书
2014/05/21 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
个人作风建设自查报告
2014/10/22 职场文书
入党团支部推荐意见
2015/06/02 职场文书
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python