let和const命令
let命令:用于声明变量。类似于var,但是所声明的变量只在代码块内有效,let没有变量提升。
1.没有变量提升
console.log(b);//报错
let b=23;
2.只在代码块内有效
if(true){
let a=12;
}
console.log(a);//报错
3.暂时性死区
只要在块级作用域内声明let,它所声明的变量就绑定在这个区域,不受外界影响
1.同一个作用域中不能重复声明
let a=12;
if(true){
a=13;
let a;//报错的源头
console.log("代码块里"+a);//报错
}
console.log("全局的"+a);//报错。
2.let和var也不能声明相同变量
var a=11;
let a=12;
console.log(a);//报错
const命令:const声明一个只读常量,一旦声明,不能改变,也没有变量提升
1.变量定义不能改变
const PI=3.1415;
console.log(PI);//3.1415
PI=3.15;
console.log(PI);//报错
2.没有变量提升
console.log(PI);//报错
const PI=3.1415;
3.基本类型不能改值,引用类型不能改地址
const obj={name:"张三",age:23}
obj.name="李四"
console.log(obj.name);//值可以改,输出李四
obj=[1,2,3]
console.log(obj[0]);//对象不能改,报错
声明方式有几种:
var let const function class import
变量的解构赋值:
用来减少变量的定义,并且从数组或对象中提取值,更方便,ES6提出了解构赋值
1.数组的解构赋值:
let [a,b,c]=[1,2,3]
console.log(a);//1
console.log(b);//2
console.log(c);//3
可以省略变量:
let [,,b]=[1,2,3]
console.log(b);//3
可以与扩展运算符连用
let [a,...b]=[1,2,3,4,5]
console.log(a);//1
console.log(b);//[2,3,4,5]
可以定义默认值
let [a,b,c=0]=[1,2]
console.log(a);
console.log(b);
console.log(c);//0
可以引用解构赋值的其他变量
let [a,c=a]=[1]
console.log(a)//1
console.log(c)//1
注意错误:
1.解构赋值前后类型对应
let [a]=1
console.log(a);//报错
2.undefined不能替换默认值
let [a,c=0]=[1,undefined]
console.log(a)//1
console.log(c)//0不能替换 null可以替换
3.引用扩展运算符和解构赋值的其他变量不能倒着写
let [...a,b]=[1,2,3,4,5]
console.log(a);//报错
console.log(b);
let [c=a,a=2]=[]
console.log(a)//报错
console.log(c);
2.对象的解构赋值
基本用法:
let {name,sex}={name:"张亮",sex:"男"}
console.log(name);//张亮
console.log(sex);//男
给变量起别名:
let {name:a,sex:b}={name:"张亮",sex:"男"}
console.log(a);//张亮
console.log(b);//男
console.log(name);//报错
console.log(sex);
可以定义默认值:
let {name:a,sex:b,age=22}={name:"张亮",sex:"男"}
console.log(age)//22
嵌套对象的解析:
var {name,mon:[a,b,c]}={name="张",mon:[2000,3000,1000]}
console.log(name)//张
console.log(a)//2000
console.log(b)//3000
console.log(c)//1000
3.字符串的解构赋值
解构字符串的值:
var [...arr]="hello"
console.log(arr)//["h","e","l","l","o"]
解构对象下的属性和方法:
var {length}="hello"
console.log(length)//5
var {toString}=123
console.log(toString)//输出toString函数体
4.函数下的参数解构赋值
当参数为一个数组进行解构
function fun(a,b,c){
console.log(a)
console.log(b)
console.log(c)
}
fun([1,2,3])
当参数为一个对象进行解构
function fun1({name:a,age:b}){
console.log(a+","+b)
}
fun1({name:"z",age:23})
注意:当解构赋值后面的值为其他类型,先考虑这个类型是否转化成对象,否则不能解构
例:交换x,y的值
var x=100
var y=200
var [y,x]=[x,y]
console.log(x)
console.log(y)