Node.js 4.0的ES6新特性。
簡介
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球最大的開源庫生態系統。
Node.js 4.0.0這個版本是Node和iojs合併後釋出的首個穩定版本,並且為開發者帶來了大量的ES6語言擴充套件。瞭解 Node.js中包括的ES6語言擴充套件。本課將會為你介紹如何使用這些新特性。
Node.js 4.0.0 可以讓您享受最尖端的技術,保持專案的先進性。其中對 v8 的升級幾乎做到了與 Chromium / Google Chrome 同步,達到了 4.5.x,它提供了很多新的語言功能。ECMA-262 是 JavaScript 語言規範的最新版本,而且好多新特性數都是開箱即用的。這些新特性包括:
- classes - 各種 ‘類’,再也無需用 CoffeeScript 的語法糖寫類了
- generators - 未來的.js 程式碼中將有無數生成器,不學一點就看不懂 JS 程式碼了哦
- collections - 集合、對映、弱集合、弱對映
- arrow functions - 箭向函式
- block scoping - 使用 let 、const 作用域,塊轄域
- template strings - 模板字串
- promises - 用標準化了的方法進行延遲和非同步計算
- symbols - 唯一的、不可修改的資料
嚴格模式
嚴格模式在語義上與正常的JavaScript有一些不同。 首先,嚴格模式會將JavaScript陷阱直接變成明顯的錯誤。其次,嚴格模式修正了一些引擎難以優化的錯誤:同樣的程式碼有些時候嚴格模式會比非嚴格模式下更快。 第三,嚴格模式禁用了一些有可能在未來版本中定義的語法。
因為我們ECMAScript 6中的一些特性,必須在嚴格模式下,才可以使用,而不報錯。
嚴格模式可以應用到整個script標籤或某個別函式中。
為整個script標籤開啟嚴格模式, 需要在所有語句之前放一個特定語句 "use strict"; (或 'use strict';)
// 整個語句都開啟嚴格模式的語法
"use strict";
let v = "Hi! I'm a strict mode script!";
同樣的,要給某個函式開啟嚴格模式,得把 "use strict"; (或 'use strict'; )宣告一字不漏地放在函式體所有語句之前。
function strict()
{
// 函式級別嚴格模式語法
'use strict';
return "Hi! I'm a strict mode function!" ;
}
function notStrict() {
return "I'm not strict.";
}
let
let 允許把變數的作用域限制在塊級域中。與 var 不同處是:var 申明變數要麼是全域性的,要麼是函式級的,而無法是塊級的。
let vs var
let的作用域是塊,而var的作用域是函式
'use strict';
var a = 5;
var b = 10;
if (a === 5) {
let a = 4; // The scope is inside the if-block
var b = 1; // The scope is inside the function
console.log(a); // 4
console.log(b); // 1
}
console.log(a); // 5
console.log(b); // 1
let在迴圈中
可以使用let關鍵字繫結變數在迴圈的範圍而不是使用一個全域性變數(使用var)定義。
'use strict';
for (let i = 0; i < 10; i++) {
console.log(i); // 0, 1, 2, 3, 4 ... 9
}
console.log(i); // i is not defined
上面報錯,因為變數i不存在於for語句外的作用域中。let建立塊級作用域變數的,使用var建立一個全域性變數。
const
const這個宣告建立一個常量,可以全域性或區域性的函式宣告。
一個常量可以是全域性的或者是區域性的,常量遵循與變數相同的作用域規則。
一個常量不可以被重新賦值,並且不能被重複宣告.所以,雖然可以在宣告一個常量的時候不進行初始化,但這樣做是沒有意義的,因為這個常量的值永遠會保持undefined。
一個常量不能和它所在作用域內的其他變數或函式擁有相同的名稱。
示例 下面的例子演示了常量的行為。
const num = 10;
num =20;
console.log(num); // 10
如果我們在上面宣告常量num,在宣告var num,這時會報錯,num已經宣告。
const num = 10;
var num = 20;
console.log(num); // 'num' has already been declared
塊級作用域
很多語言中都有塊級作用域,JavaScript使用var宣告變數,以function來劃分作用域,大括號“{}” 卻限定不了var的作用域。用var宣告的變數具有變數提升(declaration hoisting)的效果。
ES6裡增加了一個let,可以在{}, if, for裡宣告。用法同var,但作用域限定在塊級,let宣告的變數不存在變數提升。
'use strict';
function f1() {
var a = 1;
let n = 2;
if (true) {
var a = 20;
let n = 10;
}
console.log(n); // 2
console.log(a); // 20
}
f1();
類宣告和類表示式
ES6 中的類實際上就是個函式,而且正如函式的定義方式有函式宣告和函式表示式兩種一樣,類的定義方式也有兩種,分別是:類宣告、類表示式。
類宣告 類宣告是定義類的一種方式,就像下面這樣,使用 class 關鍵字後跟一個類名(這裡是 Ploygon),就可以定義一個類。
'use strict';
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
變數提升 類宣告和函式宣告不同的一點是,函式宣告存在變數提升現象,而類宣告不會。也就是說,你必須先宣告類,然後才能使用它,否則程式碼會丟擲 ——ReferenceError 異常,像下面這樣:
var p = new Polygon(); // ReferenceError
class Polygon {}
類表示式
類表示式是定義類的另外一種方式,就像函式表示式一樣,在類表示式中,類名是可有可無的。如果定義了類名,則該類名只有在類體內部才能訪問到。
'use strict';
// 匿名類表示式
var Polygon = class {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
// 命名類表示式
var Polygon = class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
建構函式
類的成員需要定義在一對花括號 {} 裡,花括號裡的程式碼和花括號本身組成了類體。類成員包括類構造器和類方法(包括靜態方法和例項方法)。
class 根據 constructor 方法來建立和初始化物件。
constructor方法是類的預設方法,通過new命令生成物件例項時,自動呼叫該方法。一個類只能有一個constructor方法,如果沒有顯式定義,一個空的constructor方法會被預設新增。
constructor() {} constructor方法預設返回例項物件(即this),完全可以指定返回另外一個物件。
'use strict';
class Foo {
constructor() {
return Object.create(null);
}
}
new Foo() instanceof Foo
// false
上面程式碼中,constructor函式返回一個全新的物件,結果導致例項物件不是Foo類的例項。
constructor 方法是一個特殊的類方法,它既不是靜態方法也不是例項方法,它僅在例項化一個類的時候被呼叫。一個類只能擁有一個名為 constructor 的方法,否則會丟擲 SyntaxError 異常。
嚴格模式 類和模組的內部,預設就是嚴格模式,所以不需要使用use strict指定執行模式。只要你的程式碼寫在類或模組之中,就只有嚴格模式可用。
靜態方法
static關鍵字定義了一個類的靜態方法。靜態方法被稱為無需例項化類也可當類被例項化。靜態方法通常用於為應用程式建立實用函式。
示例
'use strict';
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.sqrt(dx*dx + dy*dy);
}
}
const p1 = new Point(5, 5);
const p2 = new Point(10, 10);
console.log(Point.distance(p1, p2));
使用 extends 關鍵字建立子類
extends 關鍵字可以用來建立繼承於某個類的子類。
這個例子是根據名為Animal類建立一個名為Dog的類。
'use strict';
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
var dog = new Dog('NiNi');
dog.speak();
更多內容、示例和練習大家可以去這裡試試===>http://www.hubwiz.com/course/561e0c8a1bc20c980538e1e8/
相關文章
- Node.js 4.0 中的 ES 6 特性介紹Node.js
- ES6新特性
- ES6常用的新特性
- Rails 4.0新特性介紹AI
- Redis4.0的新特性介紹Redis
- es6新特性分享
- Apache Cassandra 4.0新特性介紹Apache
- ES6新特性總結
- 玩轉ES6新特性
- ES6 新特性之SymbolSymbol
- 前端-JavaScript新特性(ES6)前端JavaScript
- 淺析ES6新特性
- ES6常用的新特性總結
- TiDB 4.0 新特性嚐鮮指南TiDB
- 認識 MongoDB 4.0 的新特性——事務(Transactions)MongoDB
- ES6中的新特性:Iterables和iterators
- ES6新特性:JavaScript中的Reflect物件JavaScript物件
- ES6新特性Promise詳解Promise
- ES6中let 和 const 的新特性
- javascript ES6 新特性之 解構JavaScript
- 簡單說說ES6新特性
- es6新特性之 class 基本用法
- Java SE 6 新特性: Java DB 和 JDBC 4.0JavaJDBC
- ES6系列之專案中常用的新特性
- ES6新特性:JavaScript中的Map和WeakMap物件JavaScript物件
- es6新語法新特性總結(上)
- TiDB 4.0 新特性前瞻:白話 “悲觀鎖”TiDB
- .net 4.0 中對多執行緒新特性(轉)執行緒
- ES6中常用的10個新特性講解
- JS 開發者必須知道的十個 ES6 新特性JS
- ES6 新特性(一部分)
- es6新特性--let,const關鍵字
- 使用ES6新特性開發微信小程式微信小程式
- Node.js 8.5 正式釋出,新特性一覽Node.js
- ES6新特性:JavaScript中內建的延遲物件PromiseJavaScript物件Promise
- ES6:下一版本的JavaScript的新特性JavaScript
- TiDB 4.0 新特性前瞻(四)圖形化診斷介面TiDB
- es6、7、8、9新語法新特性-總結