前端问题清单——解构赋值

96 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

解构赋值语法是一种Javascript表达式,通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。

数组的解构赋值

let a, b, c
[a,b,c]=[1,2,3]
a//1
b//2
c//3

  • 本质上,这种写法属于“模式匹配”,如果两边的模式相同,左边的变量就会被赋予右边对应的值,如果解构不成功,变量值严格等于undefined
let a,b,c
[a,b,c]=[1,2,3,4,5]
a//1
b//2
c//3
  • 如果左边的模式只能匹配右边一部分的,依然可以成功赋值
  • 如果右边数据不可比遍历,会报错
  • 支持迭代器遍历的数据都可以采用数组形式的解构赋值
  • 关于默认值
    • 允许指定默认值
    • ES6内部使用严格相等运算符,来判断一个位置是否有值。所以只有当一个数组成员严格等于undefined,默认值才会生效。(null不严格等于undefined)
    • 如果默认值是一个表达式,那么这个表达式是惰性求值的,只有在用到才会求值
    • 默认值可以引用解构赋值的其他变量,但是变量在用的时候必须已经声明

对象的解构赋值

let test = {a:1,b:2}
let {b,a} = test
b//2
a//1
  • 与数组不同,数组的元素是按照次序排列,变量的取值由位置决定,而对象的属性没有次序,变量必须与属性同名才能取到正确的值
let {a:1,b:2} = {a:2}
a//2
b//2
  • 如果解构失败,要提取的对象对应属性解析为undefined,变量被赋予默认值
  • 对象的解构赋值,可以很方便的解构嵌套的对象
  • 关于默认值
    • 允许指定默认值
    • 默认值生效的条件与数组类似,对象的属性值要严格等于undefined

字符串的解构赋值

let [a,b,c] = 'xyz'
a//x
b//y
c//z
  • 字符串是可遍历的,因此可以使用数组解构赋值
let {length} = 'string'
length//6
  • 可以对字符串的length属性解构赋值

其他类型值的解构赋值

  • 如果等号右边的值不是对象或数组,就先把右边的值转为对象,后续按照对象的解构赋值进行
  • 由于undefined和null无法转为对象,所以在解构它们的时候会报错