ES6准确的定义来说应该是ES2015,但是更多情况下,被广义的代表为ES5之后的所有版本。因为ES5到ES6这个版本的跨越很大,有非常多的新语法和api诞生,就像是1949年的中国,截止1949年都之前的都称为旧中国,1949年之后就是新中国。一个道理,就是一个里程碑的代名词而已。
避免var带来的一些问题
//es5
var a = 1
//es6
let b = 2
const c = 3
更为方便的取值
//数组
let [name,age,work] = ['wjt',28,'coder']
//对象
let {name,age} = {age:28,name:'wjt'}
字符串拼接的优化
let name = 'wjt'
let age = 28
//ES5
var str2 = '我叫'+str1+',我今年'+age+'岁'
//ES6
let str3 = `我叫${name},我今年${age}岁`
通过Symbol函数命名,生成一个独一无二的值
let s1 = Symbol('wjt');
结构类似于数组,但是内部成员唯一不重复
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
键值对映射的容器
const map = new Map([
['name', 'wjt'],
['age', 28]
]);
map.get('name') //'wjt'
map.get('age') // 28
可以实现对api本身重写,拦截,代理,意义重大
var proxy = new Proxy(target, handler);
专门用来处理异步编程的api
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
访问各种结构数据的必要方法
const arr = ['red', 'green', 'blue'];
for(let v of arr) {
console.log(v); // red green blue
}
异步函数的解决方案
function* asyncJob() {
// ...其他代码
var f = yield readFile(fileA);
// ...其他代码
}
Generator函数的语法糖
async function timeout(ms) {
await new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
看上去更符合面向对象的一种语法糖,实则是构造函数的另一种写法
/**构造函数的语法*/
function Person(name,age){
this.name = name
this.age = age
}
Person.prototype.getString = function(){
return `${this.name}的年龄是${this.age}`
}
/**class的语法*/
class Person{
name = null
age = null
constructor(name,age){
this.name = name
this.age = age
}
getString(){
return `${this.name}的年龄是${this.age}`
}
}
工程中必不可少的内容,导入导出文件暴露的数据和方法
其他还有很多对原生对象属性的增强,比如正则,函数,数组,对象等方法的新增扩展,以及ArrayBuffer等。