ES?
transpiling
我们需要防止 js 生态落后于 ES 版本,我们希望新的特性和模式一旦被确定,就能够被浏览器所支持,在开发中得到应用。
- transpiling 就是为此而生
这是一种转换+编译的技术,思路是把你的 ES6 代码转换为等价的 ES5 环境下可以工作的代码。
- shim/polyfill
这是另一种思路,当你的代码仅仅需要转换新的 API 而非语法时,可以使用它们来在旧环境中定义新环境 API 等价的行为。例如下面的代码在 ES5 中定义了 Object.is 方法。
if (!Object.is) {
Object.is = function(v1, v2) {
// 检查-0
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
// 检查NaN
if (v1 !== v1) {
return v2 !== v2;
}
// 其余所有情况
return v1 === v2;
};
}
默认参数值
function foo( x = 1 ,y = 31 ){ };
传入 undefined 来触发默认值。
默认值可以使用表达式,但表达式中不能引用自己,因为引用时还未赋值,它处于暂时死区中。
解构
- 对象的属性赋值,赋值时是反转的
let A = { Akey:'value1' , Akey2:'value2' };
let { Akey:name1 , Akey2:name2 } = A;
赋值理解为将 A 赋值给 B,这与以往的 A=B 左边赋值给右边是相反的!
- 注意这是赋值不是声明!
- let B = { value:key } = A;是不合法的!
- B = { value:key } = A; B 的赋值结果为 A。
简洁方法
//在对象中方法的定义
let obj = {
x(){},
y:function(){}
}
尽管看上去仅仅是一种简写的形式,但简洁方法支持 super,但后者不支持。
新API
Array
- .of()
接受多个数字,将其按顺序组成一个数组。
Array(1,2,3); //[1,2,3]
- .from()
将类数组转为数组,没有索引的地方会用 undefined 代替,而不是像 Array(3) 那样产生“空槽位”,空槽位总是会产生意想不到的 bug。
- #fill()
用参数填充数组的空槽位。
Array(4).fill(undefined);
- #find()
与 indexof 不同的是,它在找不到时返回 undefined。
而 indexof 返回 -1。
- #values(),#keys(),#entries()
Object
- .assign()
用于将一个对象的属性复制/混合到另一个对象。
复制的属性包括自己的所有可枚举属性。
(不包括不可枚举以及原型链上的属性)