ES6入门之变量的解构赋值(二)
前言
在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进一步深入了解ES6中的相关语法,毕竟未来ES6是主流。
本章目标
学会数组的解构赋值
学会对象的解构赋值
学会字符串的解构赋值
学会数值和布尔值的解构赋值
学会函数参数的解构赋值
学会解构赋值的用途
本人对解构赋值的理解:模式匹配,匹配成功获取值,匹配不成功则为undefined,好比开心消消乐一样(我没有玩过,但是听过一点点),开心消消乐中只要有相同的就会消失,然后加分,而模式匹配呢?匹配成功加分,匹配不成功则失败。
数组的解构赋值
数组的解构赋值十分简单,只要等号左右两边模式匹配成功,则获取值,否则为undefined,在讲解数组解构赋值之前,我们先来看下我们以前定义变量的格式
复制代码
复制代码
在这里我们已经使用了数组的解构赋值,即let [a,b,c]=[4,5,6]左右两边进行模式匹配,可得a=4,b=5,c=6
(1)不完全解构
解构除了完全解构之外,还具备不完全解构的特性,即左边的模式只匹配一部分等号右边的数组
复制代码
复制代码
(2)特殊值
如果等号右边不是数组,那么将会报错
复制代码
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
复制代码
(3)默认值
数组的解构允许有默认值,如果一个数组的成员为null,默认值就不会生效,因为null不严格等于undefined
复制代码
复制代码
对象的解构赋值
关于对象的解构赋值我总结了如下三点
数组的元素是按次序排列的,变量的取值有它的位置决定,而对象的属性是没有次序的,变量必须和属性同名,才能取到正确的值
如果解构失败,变量的值等于undefined
对象解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量,真正被赋值的是后者,而不是前者
示例1
复制代码
对象的解构赋值
复制代码
在这个案例中,我们有按顺序的解构,没有顺序的解构,以及解构不成功的情况
示例二
复制代码
对象的解构赋值
复制代码
从而可以看出:对象解构赋值的原理是先找到同名属性,然后再赋给对应变量,真正被赋值的是后者而不是前者
字符串的解构赋值
字符串的结构赋值十分简单,和之前的解构赋值一样也是模式匹配,注意:字符串中有length属性
复制代码
字符串解构赋值
复制代码
数值和布尔值的解构赋值
解构赋值原理:只要等号右边的值不是数组或对象,就先将其转为对象,但是也有特殊情况,如:undefined和null无法转为对象,所以对它们进行解构赋值都会报错。这一点非常重要
复制代码
数值和布尔值的解构赋值
复制代码
函数参数的解构赋值
复制代码
函数参数解构赋值
复制代码
在move方法中函数move的参数是一个对象,通过对这个对象进行解构,得到变量x和y的值。如果解构失败,x和y等于默认值,而函数bar的参数指定默认值,而不是为变量x和y指定默认值,所以会得到与前一种写法不同的结果
解构赋值的实际用途
(1)交换变量的值
复制代码
解构赋值的用途
复制代码
在这里,我们可以看到x和y的值进行了交换,x的值从1变成的2,而y的值从2变成了1
(2)从函数返回多个值
我们知道javascript中中使用return只能返回一个值,如果需要返回多个值的话就需要将数据放在数组或对象中,然后return回去,但是有了解构赋值,你想要取出这些值就非常方便,我们看下下面的示例。
复制代码
解构赋值的用途
复制代码
在这里我们返回一个数组之后使用a,b,c进行解构赋值,匹配a=1,b=2,c=3,而返回对象之后我们使用对象来接收,注意:返回对象的键名一定要和需要解构的键名一致,否则取到的值为undefined
(3)函数参数定义
复制代码
解构赋值的用途
复制代码
(4)提取JSON数据
复制代码
解构赋值的用途
复制代码
使用解构赋值可以很方便的提取JSON中的数据
(5)函数参数默认值
这种方法我们见过很多,再封装ajax的时候经常用到或者是扩张jquery插件的时候,我们都会添加默认值
复制代码
//(5)函数参数默认值
;
(function(method) {
method(window, window.document, jQuery);
}(function(win, doc, $) {
$.fn.SuperPlus = function(options) {
//默认参数
var setting={
length:3,
color:"blue"
};
//使用用户的参数覆盖默认参数
$.extend(setting,options);
return $.each(this, function(index, obj) {
$("").html("+").css("cursor", "pointer").css("color",setting.color).click(function() {
$(obj).width($(obj).width() + setting.length);
}).insertAfter(obj);
});
}
}));
复制代码
在这里我们就是指定了默认值,我们对外开发我们可以让用户进行修改的一些参数,当用户没有传递的时候,我们就使用默认值
(6)遍历Map结构
复制代码
解构赋值的用途
复制代码
这里涉及到map的相关知识,关于ES6新增的数据结构,查看博客 https://www.cnblogs.com/jjgw/p/11561169.html
(7)输入模块的指定方法
复制代码
解构赋值的用途
复制代码
这种方法我们之后会用到,关于ES6中模块的加载,例如:AMD,CMD,UMD等等,现阶段只需要了解一下https://www.cnblogs.com/jjgw/p/11717379.html