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

es6--变量的解构赋值

时间:2018-04-30 23:29:32      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:结果   get   ret   undefined   ror   表达   数组   变量赋值   对应关系   

基本用法:

以前为变量赋值只能直接指定值;

var a = 1;
var b = 2;
var c =  3;

 而es6允许写成下面这样:

var [a, b, c] = [1, 2, 3];

 上面的代码表示:可以从数组中提取值,按照位置的对应关系对变量赋值。

    举个获取元素的例子

   

        <div id="app">
	  <div id="top">1</div>
	  <div id="main">2</div>
	  <div id="footer">3</div>
	</div>
	<script>
	  function $(id) {
	    return document.getElementById(id);
	  }
      var [mytop, mymain, myfooter] = [$("top"),$("main"),$("footer")];
      alert(myfooter.innerHTML) // 1
	</script>

 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会赋予对应的值,下面的是使用嵌套数组进行解构的例子。

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [,, third] = ["foo", "bar", "baz"];
third // "baz"


let [x,, y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] =  [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ["a"];
x // "a"
y // "undefined"
z // []

 如果解析不成功,变量的值就会变成 undefined.

var [foo] = [];
var [bar, foo] = [1];

 以上两种情况都属于解构不成功,foo的值都会等于undefined.

另一种情况是不完全解构,即左边的模式只匹配等号右边数组的一部分。这种情况下,解构依然可以成功。

let [x, y] = [1, 2, 3];
x // 1
y // 2

let [a, [b],d]] = [1, [2, 3], 4];
a // 1;
b // 2
c // 4
上面的例子都属于不完全解构,但是可以成功。
如果等号的右边不是数组(或者严格说,不是可便利的结构),那么将会报错。
// 报错
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};

 

默认值

解构赋值允许指定默认值。var [foo = true] = [];foo // true

[x, y = "b"] = ["a"]; // x = "a", y = "b"
[x, y = "b"] = ["a", undefined] // x = "a", y = "b";

主要ES6内部使用严格相等符(===)判断一个位置是否有值。所以如果一个数组成员不严格等于undefined,默认值是不会生效的。
var [x, y] = [undefined];
x //1;

var [x = 1] = [null]
x // null
上面的代码中,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined.
如果默认值是一个表达式,那么这个表达式是惰性求值,即只有在用到的时候才会求值

function f() {
  console.log("aaa");
}

let [x = f()] = [1];

*上面的代码因为x能取到值,所以函数f根本不会执行。上面的代码其实等价与以下代码。

let x;
if ([1][0] === undefined) {
    x = f();
} else {
   x = [1][0]
}


默认值可以引用解构赋值的其他变量,但该变量必须已经声明。 let [x = 1, y = x] = []; // x = 1; y = 1 let [x = 1, y = x] = [2] // x = 2; y = 2 let [x = y, y = 1] = []; // ReferenceError

 上面的最后一个表达式之所以会报错,是因为 x用到默认值y时y还没有声明。

 

 注:
[1] 是只含元素 1 的数组
[0] 是取数组的第 0 个元素
[1][0] 的结果就是 1 拉
[1][0] === undefined 只是个条件判断而已,即 1 === undefined 

es6--变量的解构赋值

标签:结果   get   ret   undefined   ror   表达   数组   变量赋值   对应关系   

原文地址:https://www.cnblogs.com/qjuly/p/8975102.html

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