解构赋值
1、概述:
解构赋值是对赋值运算符的扩展。
是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取
2、基本结构
数据模型=数据源
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。
可嵌套、可忽略、
var obj={age:200,name:"karen"}
var {age,name}=obj
//隐式代码
var age=obj.age
var name=obj.name
console.log(age)//window.age
console.log(name)
console.log(window)
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { }] } = obj;
// x = 'hello' {}可忽略
不完全解构、
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
传入的是对象的属性值
function fn ({x,y}) {
console.log(x) //x=obj.x
console.log(y) //y=obj.y
}
var obj={x:100,y:200}
fn(obj) //100 200
剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
解构默认值
let {a = 10, b = 5} = {a: 3};
// 隐式 b=5,a=10 =>a=3
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;
注意用法别搞错
var arr=[{age:30}]
function fn () {
// let arr[0].age=90;//错误
let [{age}]=arr;
age=90;
console.log(age)
}
fn()
symbol
新增的基本数据,做为对象的属性名时,能保证不与其他同名的属性名冲突
用法
sym=Symbol("hello"),传参不影响,只用于解释。
var obj={fn:function(){console.log(this)}}
var obj2={
fm:function(){}
}
let x=Symbol("hello")
obj2[x]=obj.fn
obj2.fm()