es6 - ES2015
ECMAScript 和 JavaScript 到底是什么关系?
ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现
ES6 与 ECMAScript 2015 的关系
标准委员会最终决定,标准在每年的 6 月份正式发布一次,作为当年的正式版本。 ES6 的第一个版本,就这样在 2015 年 6 月发布了,正式名称就是《ECMAScript 2015 标准》(简称 ES2015)
提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”
https://github.com/tc39/ecma262
https://262.ecma-international.org/6.0/
let、const
结构赋值 Destructuring
let [a,b,c]=[1,2,3]
判断集合是否有空值
初始值是true,r 上一次结果,r && !isEmpty(i) 判断是否有空值。
if (Array.isArray(v) && v.length === 4) {
return v.reduce((r, i) => r && !isEmpty(i), true);
}
arrow function 箭头函数
Set、Map
string
includes() startsWith() endsWith()
parameter default value 参数默认值
function opt(a, b = "123") {
// 参数默认值只能在后面
}
Rest 剩余参数
function opt(a, ...rest) {
// 参数默认值只能在后面
}
Spread 展开数组
const arr = [1, 2, 3, 1];
console.log.apply(console, arr);
// 等价于
console.log(...arr);
Promise
Proxy 代理对象
Reflect 统一对象操作 API
Symbol
全新的原始数据类型,用来表示一个独一无二的值
Iterable
对象要实现 Iterable 可迭代接口的方法,Iterable 要有 [Symbol.iterator] 的方法,这个方法返回一个 Iterator 对象,Iterator 要有用于迭代的 next 方法,next 方法执行返回的是迭代结果 IterationResult 对象,这个对象要有 value 和 done 属性来表示当前被迭代的数据,value 可以是任意类型,done 要是布尔类型
const obj = {
store: ["foo", "bar", "baz"],
[Symbol.iterator]: function () {
let index = 0;
const self = this;
return {
next: function () {
const res = {
value: self.store[index],
done: index >= self.store.length
};
index++;
return res;
}
};
}
};
for (const item of obj) {
console.log("循环", item);
}
// 循环 foo
// 循环 bar
// 循环 baz
Generator
在 function 后面加一个 * 就是一个 generator 函数了
生成器对象也实现了 iterator 接口
generator 函数要配合 yield 关键字去使用
generator 对象是惰性执行的,调用一次才会继续向下执行到 yield 的语句,直到执行完