数组解构赋值的原理
- 模式结构匹配
[] = [1,2,3]
- 索引值相同的完成赋值
const [a,b,c] = [1,2,3]
- 不取值直接用逗号隔开
const [a,[,,b],c] = [1,[2,3,4],5]
数组解构赋值的应用
- 常见的类数组的解构赋值
function fn() {
const [x, y] = arguments
return x + y
};
- NodeList 获取标签赋值
const p = document.querySelectorAll("p")
const [p1, p2, p3] = p
console.log(p1, p2, p3)
- 函数参数的解构赋值
const add = ([x, y]) => x + y
console.log(add([1, 2]))
- 变换变量的值
var x = 1;
var y = 2;
var tym = y;
y = x
x = tym;
[x, y] = [y, x]
console.log(y, x)
数组解构赋值的默认值
- 默认值生效条件
const [a = 1, b = 2] = [3, null]
console.log(a, b)
- 默认表达式
const fn = () => {
console.log("被执行le");
return 2
};
const [x = fn()] = []
console.log(x)
对象的解构赋值
- 模式(解构)匹配
{}={}
- 属性名相同的完成赋值
const { name: name, age: age } = { name: "显春", age: 18 };
console.log(name, age)
const { name, age } = { name: "显春", age: 18 };
console.log(name, age)
对象的解构赋值
- 函数参数的解构赋值
const add = ({ name, age }) => console.log(name, age);
add({ name: "Ajax", age: 98 });
- 复杂嵌套
x: 1,
y: [2, 3, 4],
z: {
a: 5,
b: 6,
},
};
var { x: x } = obj;
var {
y: [, yy],
} = obj;
var {
z: { a },
} = obj;
console.log(a);
console.log(x);
console.log(yy);s
const obj = {
x: 1,
y: [2, 3, 4],
z: {
a: 5,
b: 6,
},
};
var { x: x } = obj;
var {
y: [, yy],
} = obj;
var {
z: { a },
} = obj;
console.log(a);
console.log(x);
console.log(yy);
对象赋值的注意事项
- 默认值的生效条件
const { unde = "Ajax" } = { unde: "Boa" };
console.log(unde);
- 将一个已经声明的变量由于解构赋值
let a = { a: 1 };
console.log(a);
let x = 2;
console.log(x);
- 可以取到继承属性
const {a=1} = {}
const { toString } = {};
方括号语法
- 方括号语法
const prop = "age";
const data = {
[prop]: 18,
};
console.log(data);
- 方括号中可以放什么
const prop = "age";
const fn = () => "age2";
const data = {
[prop]: 18,
[fn()]: 19,
["sex"]: 20,
["s" + "ex1"]: 30,
;
console.log(data);
- 方括号语法加点语法的区别
const data = {};
data.age等价于data["age"]
其他数据类型的解构赋值
- 字符数组串解构赋值
const [a, b, , , c] = "xianchun"
console.log(a, b, c)
- 字符串对象赋值
const { 0: a, 5: b } = "xianchun"
console.log(a, b)
- 数值和布尔值得解构赋值
const {b=2,toSring}=true
console.log(b,toSring)
- undefined null 解构赋值
const { toString } = undefined
const { toString } = null
属性方法的简洁表达方法
- 实例化构造函数生成对象
const person = new Object();
person.age = 18;
person.speack = function () {};
const person = {
age: 18,
spack: function () {},
};
- 属性的简洁表示法
const age = 18;
const parc = {
age,
};
console.log(parc.age);
- 方法的简洁表示法
const parc = {
scoe() {
console.log(1);
},
};
parc.scoe();