声明方式
- let局部声明
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被污染
- const声明常量
有些变量是希望声明后在业务层就不再发生变化了,简单来说就是从声明开始,这个变量始终不变,就需要用const进行声明。
变量的解构赋值
从数组和对象中提取值,对变量进行赋值,这被称为解构
- 数组的解构赋值
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"]