ECMAScript 6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。ES是定义标准的,js是实现者,它是是一个语言的标准。
ES6新增的功能:
1.let声明变量
let声明的变量不会挂在window中,不会造成全局变量的污染,
新增了一个块级作用域{},以前只有函数作用域,全局作用域。let是不允许重复声明它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效
//var 声明
//var 在ES6里是全局变量
//var a=2;
{
var a=3;
}
console.log(a); //打印出来是3
//let局部声明
var a=2;
{
let a=3;
}
console.log(a);//打印出来是2
//var 声明的循环
for(var i=0;i<10;i++){
console.log('循环体中:'+i);
}
console.log('循环体外:'+i);//打印出来是10
//循环体外的i变量被污染了,如果在外部再使用i时就会出现问题。我们再利用let声明,就可以解决这个问题。
//用let声明的循环
for(let i=0;i<10;i++){
console.log('循环体中:'+i);
}
console.log('循环体外:'+i);//报错
//执行时会发现控制台报错了,找不到循环体外的i变量。通过两种声明的比较,可以明白let在防止程序数据污染上还是很有用处的。在以后的编写中要注意如果不想写的那段代码被全局污染那么久使用let关键字去声明我们要努力去习惯用let声明,减少var声明去污染全局空间。
2.const声明变量
跟let完全相同 增加几个点 ,不允许被修改(不允许改变内存空间的地址) ,const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址
const a = "aaa";
var a = 'bbb';
console.log(a);
//在编译这段代码的过程中,你就会发现已经报错,无法编译了,原因就是我们const声明的变量是不可以改变的。
let和const关键字
两个关键字都具有块级作用域,只在块级作用域中生效。let是一种新的var。let可以看成var,它定义的变量被限制在特定范围中才能使用,离开这个范围就自动销毁。const只能一 次性声明不能修改其值。两者静态限制防止了在赋值前使用变量。
一般情况下,使用const在定义常量。只有明确值会被改变时,我们才使用let定义变量。不再使用var。
3.ES6 提供了更接近传统语言的写法,引入了Class(类)这个概念(类的数据类型就是函数,类本身就指向构造函数),作为对象的模板。通过class关键字,可以定义类
//类的所有方法都定义在类的prototype属性上面。但类的内部所有定义的方法,都是不可枚举的(non-enumerable):
class Point {
constructor() {
}
toString() {
}
toValue() {
}
}
console.log(Object.keys(Point.prototype)); // [] 不可枚举
console.log(Object.getOwnPropertyNames(Point.prototype)); // ["constructor", "toString", "toValue"]
// 相当于
function Point() {
}
Point.prototype = {
constructor() {},
toString() {},
toValue() {},
};
console.log(Object.keys(Point.prototype)); // ["constructor", "toString", "toValue"]