码迷,mamicode.com
首页 > 其他好文 > 详细

二:变量的解构赋值

时间:2018-10-09 21:40:08      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:json   prototype   ons   var   inf   定义   分享   函数参数   个数   

1)交换变量的值

let x = 1;

let y = 2;

 

[x, y] = [y, x];

 技术分享图片

 

知识点:数组的解构赋值。

//数组的解构赋值
let [x,y] = [1,2];
let [x,y] = [2]; // x = 2 ,y =undefined;
let [x = 1] = [undefined]; x = 1
let [x = 1 ] = null ; x = null
let [ , , third] = ["foo", "bar", "baz"]; //third = baz;

 

如果等号的右边不是数组(或者严格地说,不是可遍历的结构,,那么将会报错。

// 报错

let [foo] = 1;

let [foo] = false;

let [foo] = NaN;

let [foo] = undefined;

let [foo] = null;

let [foo] = {};

 

2)从函数返回多个值

函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。

// 返回一个数组

 

function example() {

  return [1, 2, 3];

}

let [a, b, c] = example();

 

// 返回一个对象

 

function example() {

  return {

    foo: 1,

    bar: 2

  };

}

let { foo, bar } = example();

 

3)函数参数的定义

解构赋值可以方便地将一组参数与变量名对应起来。

// 参数是一组有次序的值

function f([x, y, z]) { ... }

f([1, 2, 3]);

 

// 参数是一组无次序的值

function f({x, y, z}) { ... }

f({z: 3, y: 2, x: 1});

//知识点

函数的解构(参数的解构)

function move({x = 0, y = 0} = {}) {

  return [x, y];

}

 

move({x: 3, y: 8}); // [3, 8]

move({x: 3}); // [3, 0]

move({}); // [0, 0]

move(); // [0, 0]

 

4)提取 JSON 数据

解构赋值对提取 JSON 对象中的数据,尤其有用。

let jsonData = {

  id: 42,

  status: "OK",

  data: [867, 5309]

};

 

let { id, status, data: number } = jsonData;

 

console.log(id, status, number);

// 42, "OK", [867, 5309]

 

知识点:对象的解构

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };

let { foo: baz } = { foo: "aaa", bar: "bbb" };

baz // "aaa"

foo // error: foo is not defined

技术分享图片

 

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是注意,这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样。

let obj = {

  p: [

    ‘Hello‘,

    { y: ‘World‘ }

  ]

};

 

let { p, p: [x, { y }] } = obj;

x // "Hello"

y // "World"

p // ["Hello", {y: "World"}]

模式foo。

 

 

默认值生效的条件是,对象的属性值严格等于undefined。

var {x = 3} = {x: undefined};

x // 3

 

var {x = 3} = {x: null};

x // null

 

(5)数值和布尔值的解构赋值

let {toString: s} = 123;

s === Number.prototype.toString // true

 

let {toString: s} = true;

s === Boolean.prototype.toString // true

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

let { prop: x } = undefined; // TypeError

let { prop: y } = null; // TypeError

 

二:变量的解构赋值

标签:json   prototype   ons   var   inf   定义   分享   函数参数   个数   

原文地址:https://www.cnblogs.com/love-life-insist/p/9762715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!