V8最新支援的一些語法簡介

JavaDog發表於2019-01-25

V8在v7.0版本後,支援了一些新的語法,如需驗證以下語法,需使用對應的支援版本

chrome 最新版本支援到v7.1, chrome金絲雀版本支援v7.2 , Node.js 11.0.0版本後支援到v7.0

v7.0 (2018.10.15)

新增:Symbol.description複製程式碼

image.png

v7.1 (2018.10.31)

相對時間函式

const rtf = new Intl.RelativeTimeFormat('en');
rtf.format(3.14, 'second');
// → 'in 3.14 seconds'rtf.format(-15, 'minute');
// → '15 minutes ago'// 本地化相對時間const rtf = new Intl.RelativeTimeFormat('zh', {
numeric: 'auto'
});
rtf.format(-1, 'day');
// → '昨天'rtf.format(0, 'day');
// → '今天'rtf.format(1, 'day');
// → '明天'rtf.format(-1, 'week');
// → '上週'rtf.format(0, 'week');
// → '本週'rtf.format(1, 'week');
// → '下週'複製程式碼

v7.2版本 (2018.12.18)

新增對公共 class 欄位(public class fields) 的支援,例如下面的舊寫法:

class Animal { 
constructor(name) {
this.name = name;

}
}class Cat extends Animal {
constructor(name) {
super(name);
this.likesBaths = false;

} meow() {
console.log('Meow!');

}
}複製程式碼

現在可以寫成:

class Animal { 
constructor(name) {
this.name = name;

}
}class Cat extends Animal {
likesBaths = false;
meow() {
console.log('Meow!');

}
}複製程式碼

V8 計劃支援 private class fields

class IncreasingCounter { 
#count = 0;
// 私有屬性
get value() {
console.log('Getting the current value!');
return this.#count;

} increment() {
this.#count++;

}
}const counter = new IncreasingCounter();
counter.#count;
// → SyntaxErrorcounter.#count = 42;
// → SyntaxError複製程式碼

JSON.stringify 支援 Unicode 輸出

// 老版本會輸出無法解析的字元// 新支援後,輸出 '\uD800' 字串JSON.stringify('\uD800');
複製程式碼

資料格式化

const lf = new Intl.ListFormat('en');
lf.format(['Frank']);
// → 'Frank'lf.format(['Frank', 'Christine']);
// → 'Frank and Christine'lf.format(['Frank', 'Christine', 'Flora']);
// → 'Frank, Christine, and Flora'lf.format(['Frank', 'Christine', 'Flora', 'Harrison']);
// → 'Frank, Christine, Flora, and Harrison'const lf = new Intl.ListFormat('en', {
type: 'disjunction'
});
lf.format(['Frank']);
// → 'Frank'lf.format(['Frank', 'Christine']);
// → 'Frank or Christine'lf.format(['Frank', 'Christine', 'Flora']);
// → 'Frank, Christine, or Flora'lf.format(['Frank', 'Christine', 'Flora', 'Harrison']);
// → 'Frank, Christine, Flora, or Harrison'const lf = new Intl.ListFormat('zh');
lf.format(['永鋒']);
// → '永鋒'lf.format(['永鋒', '新宇']);
// → '永鋒和新宇'lf.format(['永鋒', '新宇', '芳遠']);
// → '永鋒、新宇和芳遠'lf.format(['永鋒', '新宇', '芳遠', '澤遠']);
// → '永鋒、新宇、芳遠和澤遠'複製程式碼

image.png

模組引入

### 以前import * as utils from './utils.js';
export {
utils
};
### 現在export * as utils from './utils.js';
複製程式碼

v8 與 nodejs 版本 Mapping
nodejs.org/zh-cn/downl…

如有語法遺漏,歡迎補充;
如有錯誤,歡迎指正。

來源:https://juejin.im/post/5c4a6c966fb9a049d975916b

相關文章