let命令
es6新增let命令,类似于var命令,但是声明的变量只是在let命令所在的代码块有效,并且let不可以在相同的作用域内重复声明也不存在变量提升,,而即let变量在声明之前不可以被使用var声明的变量则可以在声明之前可以使用值为undefined。
例:
{
let x=0;
let x=1;//报错
}
const命令
const声明的是一个常量,且常量在声明的时候必须初始化不能留到以后赋值否则会报错。const声明的常量不可变,复合型变量指的是指向的内存地址不可变,但复合型变量的内容是可变的 复合型常量例 ````
const foo={}
foo.prop=123;
console.log(foo.prop);//123
foo={}//TypeError:"foo" is read-only
上面的例子说明常量的属性值可以改变,一旦改变复合型常量指向的内存地址就会报错。
块级作用域
es6明确规定: 允许在块级作用域内声明函数 函数声明类似于var,即会提升到全局作用域或函数作用域的头部 函数的声明还会提升到所在的块级作用域的头部
es6中六种声明变量的方法
ES5中只有两种声明变量的方法:var命令和function命令。es6中增加了let命令、const命令、import命令、和class命令4种声明变量的方法
解构赋值
es6允许按照一定的模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值 解构赋值可以指定默认值,并且解构赋值的默认值是惰性求职的,当一个成员严格等于undefined时才会生效,且null不会生效,因为null不严格等于undefined. 默认值可以指定别的变量,前提是该变量已经声明 1.数组的解构赋值 数组解构赋值的右边必须是遍历的解构
(1).完全解构赋值
let[a,b,c]=[1,2,3]
//a 1
//b 2
//c 3
(2).不完全解赋值
let [a,b,,d]=[1,2,3]
//a 1
//b 2
//d 3
(3)指定默认值
let [x=1,y=2]=[2]
//x=2
//y=2
对象的解构赋值
对象的赋值的内部机制是先找到同名属性,然后赋给对应的变量,真正被赋值的是后者,而不是前者。
对象解构赋值的简写
let {x}={x:123}
x//123
非简写
let{x:a}={x:123}
a//123
x//x is not defined
对象指定默认值
let {x=3,y}={y:5}
x//3
y//5
字符串的解构赋值
字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
不能使用圆括号的三种情况
1.变量声明语句时不能使用圆括号
2.函数参数也属于变量声明,因此不能带有圆括号
3.赋值语句的模式
网友评论