-------------------------------------数组的解构赋值-------------------------------------------
解构:
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).
不完全解构:
等号左边的模式,只匹配一部分的等号右边的数组。
指定默认值:
注:ES6内部使用严格相等运算符(===)判断一个位置是否有值。所以,如果一个数组成员不严格等于undefined,默认值是不会生效的。
let和const命令:
只要某种数据结构具有lterator接口,都可以采用数组形式的解构赋值。
注:只要是可遍历的结构或数组都可以被解构。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组解构</title>
<script src="traceur.js"></script>
<script src="bootstrap.js"></script>
<script type="text/traceur">
// ES5
/* var a=1;
var b=2;
var c=3; */
// ES6
var [a,b,c]=[1,2,3];
console.log(a); // 1
console.log(b); // 2
console.log(c); //3
</script>
</head>
<body>
</body>
</html>
---------------------------------------------对应位置---------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对应位置</title>
<script src="traceur.js"></script>
<script src="bootstrap.js"></script>
<script type="text/traceur">
let [foo,[[bar],base]]=[1,[[2],3]];
console.log(foo); //1
console.log(bar); // 2
console.log(base); // 3
let [,,third]=["first","second","third"];
console.log(third); // third
let [one,,three]=["one","two","three"];
console.log(one); // one
console.log(three); //three
let [head,...tail]=[0,1,2,3,4,5,6,7,8,9];
console.log(head); // 0
console.log(tail); // [1,2,3,4,5,6,7,8,9]
</script>
</head>
<body>
</body>
</html>
--------------------------------------------------------数组解构不成功-------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组解构不成功</title>
<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
var [temp]=[];
console.log(temp); //undefined
var [first,second]=[100];
console.log(first); //100
console.log(second); //undefined
//解构不成功的默认值都是undefined
</script>
</head>
<body>
</body>
</html>
------------------------------------------------不完全解构--------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>不完全解构</title>
<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
let [x,y]=[1,2,3];
console.log(x); //1
console.log(y); //2
let [a,[b],c]=[1,[2,3],4];
console.log(a); //1
console.log(b); //2
console.log(c); //4
</script>
</head>
<body>
</body>
</html>
----------------------------------------------------指定默认值------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>指定默认值</title>
<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
var [temp="string"]=[];
console.log(temp); //string
var [temp="string"]=["tempString"];
console.log(temp); //tempString
var [x="aaa",y]=["bbb"];
console.log(x); //bbb
console.log(y); //undefined
var [m,n="aaa"]=["bbb"];
console.log(m); //bbb
console.log(n); //aaa
var [p,q="aaa"]=["bbb",undefined];
console.log(p); //bbb
console.log(q); //aaa
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>非遍历解构----报错</title>
<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
var [temp]=1; // 1[Symbol.iterator] is not a function
var [temp]=false; // false[Symbol.iterator] is not a function
var [temp]=NaN; //NaN[Symbol.iterator] is not a function
var [temp]=undefined; // Cannot read property 'Symbol(Symbol.iterator)' of undefined
var [temp]=null; //Cannot read property 'Symbol(Symbol.iterator)' of null
//以上的都会报错的
</script>
</head>
<body>
</body>
</html>
------------------------------------------let和const命令----------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>lterator接口</title>
<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
//let和const命令
//只要某种数据结构具有lterator接口,都可采用数组形式的解构赋值。
let [a,b,c]=new Set(["a","b","c"]);
console.log(a); //a
console.log(b); //b
console.log(c); //c
function* fibs(){ //指针函数具有lterator接口,可遍历
let a=0;
let b=1;
while(true){
yield a;
[a,b]=[b,a+b];
}
};
var [first,second,third,fourth,fifth,sixth]=fibs();
console.log(sixth); //5
</script>
</head>
<body>
</body>
</html>