stage-0
包含stage-1、stage-2、stage-3的所有功能,同時(shí)還支持如下2個(gè)插件
transform-do-expressions (方便在jsx寫(xiě)if/else表達(dá)式)
transform-function-bind (https://www.npmjs.com/package/babel-plugin-transform-function-bind)
//transform-function-bind
const { map, filter } = Array.prototype;
let sslUrls = document.querySelectorAll('a')
::map(node => node.href)
::filter(href => href.substring(0, 5) === 'https');
console.log(sslUrls);
//轉(zhuǎn)換為
const { map, filter } = Array.prototype;
let sslUrls = document.querySelectorAll('a');
sslUrls = map.call(sslUrls, node => node.href);
sslUrls = filter.call(sslUrls, href => href.substring(0, 5) === 'https');
console.log(sslUrls);
$('.some-link').on('click', ::view.reset);
//轉(zhuǎn)換為
$('.some-link').on('click', view.reset.bind(view));
//via CLI
//babel --plugins transform-function-bind script.js
//via node
require("babel-core").transform("code", {
plugins: ["transform-function-bind"]
});
stage-1
包含stage-2、stage-3的所有功能,同時(shí)還支持如下4個(gè)插件
transform-class-constructor-call (棄用)
transform-class-properties
transform-export-extensions
stage-2
包含stage-3的所有功能,同時(shí)還支持如下2個(gè)插件
syntax-trailing-function-commas(尾逗號(hào)函數(shù))
transform-object-reset-spread(對(duì) ES6中解構(gòu)賦值的一個(gè)擴(kuò)展,因?yàn)镋S6只支持對(duì)數(shù)組的解構(gòu)賦值,對(duì)對(duì)象是不支持的)
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }
// 屬性展開(kāi)
let n = { x, y, ...z };
console.log(n); // { x: 1, y: 2, a: 3, b: 4 }
stage-3
支持了async & await,包含2個(gè)插件
transform-async-to-generator
transform-exponentiation-operator(算是一個(gè)語(yǔ)法糖,可以通過(guò)**這個(gè)符號(hào)來(lái)進(jìn)行冪操作,想當(dāng)于Math.pow(a,b))
// x ** y
let squared = 2 ** 2;
// 相當(dāng)于: 2 * 2
let cubed = 2 ** 3;
// 相當(dāng)于: 2 * 2 * 2
// x **= y
let a = 2;
a **= 2;
// 相當(dāng)于: a = a * a;
let b = 3;
b **= 3;
// 相當(dāng)于: b = b * b * b;
總結(jié):一般設(shè)置stage-0即可