首页投稿(暂停使用,暂停投稿)前端攻城狮

es6学习(一)---声明及解构

2017-07-29  本文已影响20人  AkiraSun

声明方式

var a=2;
{ 
 let a=3;
}
console.log(a);//2
{
   let a=3;
}
console.log(a);//报错

上面两个例子说明了let是局部变量声明,let声明只在区块内起作用,外部是不可以调用的。

for(let i=0;i<10;i++){
console.log('循环体中:'+i);
}
console.log('循环体外:'+i);//undefined

let用在循环体中可以防止外部i被污染

变量的解构赋值

从数组和对象中提取值,对变量进行赋值,这被称为解构

let [a,b,c]=[1,2,3];//a=1,b=2,c=3

可以简单的理解为等号左边和等号右边的形式要统一,如果不统一解构将失败

解构设置的默认值

let [foo = true] =[];
console.log(foo); //控制台打印出true
let {foo,bar} = {foo:'hello',bar:'world};
console.log(foo+bar); //控制台打印出了“helloworld”

如果在解构之前就定义了变量,这时候你再解构会出现问题。下面是错误的代码,编译会报错。
要解决报错,使程序正常,我们这时候只要在解构的语句外边加一个圆括号就可以了。

let foo;
({foo} ={foo:'hello'});
console.log(foo); //控制台输出hello

扩展运算符

function hello(...arg){
    console.log(arg[0]);
    console.log(arg[1]);
    console.log(arg[2]);
    console.log(arg[3]);
 
}
hello(1,2,3);//依次输出1,2,3,undefined

扩展运算符的用处:
我们先用一个例子说明,我们声明两个数组arr1和arr2,然后我们把arr1赋值给arr2,然后我们改变arr2的值,你会发现arr1的值也改变了,因为我们这是对内存堆栈的引用,而不是真正的赋值。


2
3
4
5
let arr1=['www','akira','com'];
let arr2=arr1;
console.log(arr2);
arr2.push('lulu');
console.log(arr1);
//["www", "akira", "com"]
//["www", "akira", "com", "lulu"]

这是我们不想看到的,可以利用对象扩展运算符简单的解决这个问题,现在我们对代码进行改造。

let arr1=['www','akira','com'];
let arr2=[...arr1];
console.log(arr2);
arr2.push('lulu');
console.log(arr2);
console.log(arr1);
//["www", "akira", "com", "lulu"]
//["www", "akira", "com"]
上一篇 下一篇

猜你喜欢

热点阅读