介绍
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中绝大多数的特性
let、const 和 block 作用域
let允许创建块级作用域,ES6 推荐在函数中使用 let 定义变量,而非 var:
同样在块级作用域有效的另一个变量声明方式是 const,它可以声明一个常量。ES6 中,const 声明的常量类似于指针,它指向某个引用,也就是说这常量并非一成不变的。如
{
const ARR = [5,6];
ARR.push(7);
console.log(ARR); // [5,6,7]
ARR = 10; // TypeError
}
1)let 关键词声明的变量不具备变量提升(hoisting)特性
2)let 和 const 声明只在最靠近的一个块中(花括号内)有效
3)当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
4)const 在声明时必须被赋值
箭头函数(Arrow Functions)
var getPrice = function() {
return 4.55;
};
// Implementation with Arrow Function
var getPrice = () => 4.55;
箭头函数采用了简洁函数体,它不需要 return 语句
函数参数默认值
ES6中允许你对函数参数设置默认值
对象和数组解构
解构可以避免在对象赋值时产生中间变量:
数组解构赋值
let [a,b,c] = [“wc”,“xq”,“z3”];
console.log(a)
console.log(b)
console.log©
简单对象解构赋值
let { name,age } = {name:"wangcai",age:100}
console.log(name)
console.log(age)
两侧的键要保持一样
let { a,b } = {name:"wangcai",age:100}
console.log(a)
console.log(b)
复杂对象解构赋值
var film = {
name:"战狼",
score:9.0,
star:["吴京1","吴京2","吴京3"],
history:[
{name:"wangcai",age:100},
]
}
对象超类
ES6 允许在对象中使用 super 方法:
var parent = {
foo() {
console.log(“Hello from the Parent”);
}
}
var child = {
foo() {
super.foo();
console.log(“Hello from the Child”);
}
}
Object.setPrototypeOf(child, parent);
child.foo(); // Hello from the Parent
// Hello from the Child
Set 和 WeakSet
Set 对象是一组不重复的值,重复的值将被忽略,值类型可以是原始类型和引用类型:
let mySet = new Set([1, 1, 2, 2, 3, 3]);
mySet.size; // 3
mySet.has(1); // true
mySet.add(‘strings’);
mySet.add({ a: 1, b:2 });
可以通过 forEach 和 for…of 来遍历 Set 对象:
mySet.forEach((item) => {
console.log(item);
// 1
// 2
// 3
// ‘strings’
// Object { a: 1, b: 2 }
});
for (let value of mySet) {
console.log(value);
// 1
// 2
// 3
// ‘strings’
// Object { a: 1, b: 2 }
}
Set 同样有 delete() 和 clear() 方法。
WeakSet
类似于 WeakMap,WeakSet 对象可以让你在一个集合中保存对象的弱引用,在 WeakSet 中的对象只允许出现一次:
var ws = new WeakSet();
var obj = {};
var foo = {};
ws.add(window);
ws.add(obj);
ws.has(window); // true
ws.has(foo); // false, foo 没有添加成功
ws.delete(window); // 从结合中删除 window 对象
ws.has(window); // false, window 对象已经被删除
类
ES6 中有 class 语法。值得注意是,这里的 class 不是新的对象继承模型,它只是原型链的语法糖表现形式。
函数中使用 static 关键词定义构造函数的的方法和属性:
Symbol
Symbol 是一种新的数据类型,它的值是唯一的,不可变的。ES6 中提出 symbol 的目的是为了生成一个唯一的标识符,不过你访问不到这个标识符:
var sym = Symbol( “some optional description” );
console.log(typeof sym); // symbol
注意,这里 Symbol 前面不能使用 new 操作符。
如果它被用作一个对象的属性,那么这个属性会是不可枚举的:
var o = {
val: 10,
[ Symbol(“random”) ]: “I’m a symbol”,
};
console.log(Object.getOwnPropertyNames(o)); // val
如果要获取对象 symbol 属性,需要使用Object.getOwnPropertySymbols(o)。