解耦赋值的用途

164 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

解耦赋值的用途

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]