小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
解耦赋值的用途
01 交换变量的值
解耦赋值可用于两个变量之间交换值。
*// 1.交换变量的值*
let x = 1;
let y = 2;
[x,y] = [y,x];
console.log(x,y);*//2 1*
02 从函数返回多个值
函数一般只能返回一个值。如果想要返回多个值,只能将多个值放置在数组或对象中。如果使用解耦赋值的话,很容易实现函数返回多个值。
function fn() {
return [1,2,3];
}
let [a,b,c] = fn();
console.log(a,b,c);*// 1 2 3
03 函数参数的定义
解耦赋值可以很方便地将一组参数与变量名对应起来。
function fun([a,b,c=0]){
*// 参数c默认值为0,就算实参调用时没有传入c的值,打印结果也可以打印出来*
console.log(a,b,c);
}
fun([1,2])*//1 2 0*
04 函数参数的默认值
例如 jQuery 提供的ajax ()方法使用解耦赋值的默认值进行实现。
05 提取JSON数据
如下示例代码:
let jsonData = {
name:'迪迦',
age: 10000,
obj: '保护世界'
};
let {name,age,obj} = jsonData;
console.log(name,age,obj);*//迪迦 10000 保护世界*
这边穿插一个解耦赋值与小括号的问题
小括号的问题
ECMAScript 6的规则是只要有可能导致解耦赋值的歧义,就不得使用小括号。 但是,这条规则实际上不那么容易分辨,处理起来相当麻烦。因此,建议只要有可能就不要再模式中使用小括号。
以下三解耦赋值时不得使用小括号:
- 变量声明语句。
*//例如该语句就会报错*
let [(a)] = [1]
- 函数参数:函数参数也属于变量声明,因此不能带有小括号
*//例如该语句就会报错*
function fn([(z)]){return z;}
function fun([z,(x)]) {return x;}
- 赋值语句的模式
*//例如该语句就会报错*
({p:a})={p:32};
([a])=[5]