一、let命令
1.基本用法
1) let所声明的变量,只有在let命令所在的代码块内有效。
{let a=10; var b=7}
console.log(a);
console.log(b);
结果:a is not defined , b=7;
2)不存在变量提升
console.log(bar);
let bar = 2;
结果报错
3)在代码块内,使用let命令声明变量之前,该变量都是不可用的
var tmp = 123;
if(true){
tmp='abc';
let tmp;
}
报错
4)不允许重复声明
function(){let a=10;let a=5;}
报错
2.块级作用域
let为javascript新增了块级作用域。外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域的同名变量
let foo=1;
{
let foo=2;
let bar='one';
}
console.log(foo); //1
console.log(bar); //报错
二、const命令
基本用法
1)不能重复声明
2)不存在变量声明的提升
3)const一旦声明变量,就必须立即初始化,const声明的变量不得改变值
4)只在声明所在的块级作用域内有效,
5)在代码块内,使用let命令声明变量之前,该变量都是不可用的
三、解构赋值
eg: let[a,b,c]=[1,2,3];
1.数组的解构赋值
let[a,b,c]=[1,2,3];
let[a[b],c]=[1,[2,3],4]; //a=1,b=2,c=4
let[head,...tail]=[1,2,3,4]; //head=1;tail=[2,3,4]
let[x,y='b']=['a']; //x=a,y=b;
2.对象的解构赋值
3.字符串的解构赋值
const[a,b,c,d]='hello'; //a=h,b=e,c=l,d=l
let{length:len}="hello"; //len=5
解构时,如果等号右边是数值或布尔值,则会先转为对象
let{toString:s}=123; //s===Number.prototype.toString true
let{toString:s}=true; //s===Boolean.prototype.toString true
4.函数参数的解构赋值
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]
解构赋值的用途
1) 交换变量的值
let x=1;
let y=2;
[x,y]=[y,x];
四、对象扩展
1) 对象简写
var age = 12;
var obj = {
name:'terry',
age,
sayName(){
console.log(this.name);
}
}
2) Object函数的拓展
Object.is()
类似于=== ,在对比+0,-0,NaN时可以用到
Object.assign()
用于对象的合并
Object.setPrototypeOf(obj,prototype);
设置某个对象的原型
Object.getPrototypeOf(obj);
获取指定对象的原型
Object.keys(obj)
Object.values(obj);
Object.entires(obj)