JS笔记之JS数据类型(六)
JS笔记之JS数据类型(六)
解构赋值是一种特殊的语法,他使可迭代对象拆包值一系列变量中,而只需要其中的一部分(与python的拆包类似)。
1 在数组中的解构
1.1 基本语法
1 | let [var1, var2] = arr; |
1 | // 我们有一个存放了名字和姓氏的数组 |
当结构语法配合spilt更加优雅
1 | let [firstName, surname] = "John Smith".split(' '); |
结构并不意味着破坏,原有的数据对象自身没有被修改。
1.2 忽略使用逗号的元素
1 | // 不需要第二个元素, 剩下的元素也被跳过了。 |
1.3 解构的元素可以赋值给任何对象
1 | let user = {}; |
Tips:使用解构交换两个变量的值
1
2
3
4
5
6
7 let guest = "Jane";
let admin = "Pete";
// 让我们来交换变量的值:使得 guest = Pete,admin = Jane
[guest, admin] = [admin, guest];
alert(`${guest} ${admin}`); // Pete Jane(成功交换!)
1.4 使用 … 解构
在解构时遇到很多元素,当左边没有右边长时,部分元素作为一个整体进行结构。
1 | let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; |
在Python中 是使用*
代替...
1 | name1, name2, *rest = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; |
当左边比右边长时, 多出的变量名默认为:undefined,也可以手动指定变量的默认值, 默认值可以是更复杂的表达式,或者是一个函数。这些表达式或者函数只有在变量未被赋值的时候在会执行计算。
1 | let [firstName, surname] = []; |
2 在对象中的解构
2.1 基本语法
1 | let {var1, var2} = {var1:…, var2:…} |
1 | let options = { |
2.2 在等号左侧的 pattern 可以更加的复杂:指定属性和变量间的关系。
1 | // 如果我们想把一个属性赋值给另一个名字的变量,比如把 options.width 属性赋值给名为 w 的变量,那么我们可以使用冒号来设置变量名称: |
其中冒号的语法是:对象中的某个属性名:具体的变量名
,如果对象中的某个属性名
不在要解构的对象中,赋值得到的结果是:undefined。 同样也可以设置默认值,默认值是任意表达式或者函数。
2.3 对象结构对于多余的属性同样可以使用:…
1 | let options = { |
在解构中如果预先定义了变量, 可能会遇到一些错误。
1 | let title, width, height; |
主要的问题是 JS 把主代码流,中的 {…} 当做一个代码块,为了告诉 JavaScript 这不是一个代码块,我们可以把整个赋值表达式用括号 (...)
包起来:
1 | let title, width, height; |
3 嵌套解构
如果一个独享或者数组中包括其他的对象或者数组,可以使用更负责的嵌套解构进行赋值。
1 | let options = { |
4 智能参数函数
有时候一个函数有很多的参数,大部分是可选的,我们可以使用一个对象来传递所有的参数,而函数负责把这个对象进行解构为对应的参数。
1 | let options = { |
上面输入的参数对象是确定了存在参数,如果想让所有的参数都是用默认值,那么在函数中直接传递一个空对象即可。
1 | showMenu({}); |
5 总结
解构可以将一个对象或者数组(只要是可迭代对象)拆开赋值到多个变量上。
解构对象的完成语法:
1 | let {prop : varName = default, ...rest} = object |
解构数组的完整语法:
1 | let [item1 = default, item2, ...rest] = array |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程纪元!
评论
ValineGitalk