ECMAScript 6 入门
var、let、const 命令
这三个关键字都是用来声明变量的,var是ES5里的语法规范,已经淘汰了;而在ES6的新语法规则中,新增了let和const两个命令,在目前开发中,会优先使用const,他声明的是常量,声明后的值不被允许更改,语义化会更好,像在react中,声明变量基本用const;let关键字在基本数据类型的值和引用数据类型的地址发生变化的时候使用,例如变量的加减乘除等。
在ES6中,声明变量有六种方法:
- var命令、function命令
- let 和 const 命令
- import命令和class命令
let
ES6 新增了let命令,用来声明变量。用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
-
测试代码1:
{ let a = 1; } console.log('a:', a);
-
执行结果:
-
测试代码2:
{ var b = 2; } console.log('b:', b);
-
执行结果:
从上面测试中,我们使用了let和var声明变量,然后分别在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
const
const声明一个只读的常量。一旦声明,常量的值就不能改变。
const a = 1;
a += 1;
console.log('a:', a);
执行结果:
以上代码报错原因是对const声明的变量进行了修改,解决方法是将const改成let;
案例
例:下面可以把let改为const吗?
let arr = ['red','yellow','blue']
arr.push('green')
let peson = {
uname:'kalyn',
age:100
}
person.address = '中国'
答案是可以的。const声明的值是不能更改的,基本数据类型发生变化不能用const,但对于复杂(引用)数据类型来说,const声明的变量里面存储的不是值,而是地址;只有当引用数据类型的地址发生变化才会修改值,这时候使用const就会报错;
var、let、const的区别?
- var是ES5提出的,let和const是ES6提出的;
- let和const具有块级作用域,而var不存在块级作用域;
- var存在变量提升,let和const则不存在;
- let和const存在暂时性死驱,不允许重复声明变量;
- const声明过的变量不能被修改;
名词解释
暂时性死驱:在一个块级作用域里,如果是用let关键字声明变量的话,这个变量就会绑定这个区域,只在这个作用域里有效,如果在这个区域之外使用的话,属于未声明先赋值,就会报错。
变量提升:var存在变量提升,也就是变量可以在声明之前使用,有返回值,返回值是undefined,但是这种逻辑不合理,正常的逻辑变量应该是在声明以后才能使用;所以,为了解决这一问题,ES6使用let、const改变了语法行为,let和const都不存在变量提升,即在声明变量之前,是找不到这个变量的值的,如果使用,就会报错。
不允许重复声明:let不允许在相同作用域内,重复声明同一个变量。
const不能修改值:let、var声明的是一个变量,声明后的值可以改变,而const声明一个只读的常量。一旦声明,常量的值(变量指向的那个内存地址所保存的数据不得改动)就不能改变。