成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nodejs 4.0 ES6特性

Doyle / 2996人閱讀

摘要:的包管理器,是全球最大的開源庫(kù)生態(tài)系統(tǒng)。函數(shù)級(jí)別嚴(yán)格模式語法允許把變量的作用域限制在塊級(jí)域中。這個(gè)聲明創(chuàng)建一個(gè)常量可以全局或局部的函數(shù)聲明。方法默認(rèn)返回實(shí)例對(duì)象即,完全可以指定返回另外一個(gè)對(duì)象。一個(gè)類只能擁有一個(gè)名為的方法,否則會(huì)拋出異常。

簡(jiǎn)介

Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。Node.js 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球最大的開源庫(kù)生態(tài)系統(tǒng)。

Node.js 4.0.0這個(gè)版本是Node和iojs合并后發(fā)布的首個(gè)穩(wěn)定版本,并且為開發(fā)者帶來了大量的ES6語言擴(kuò)展。了解 Node.js中包括的ES6語言擴(kuò)展。本課將會(huì)為你介紹如何使用這些新特性。

Node.js 4.0.0 可以讓您享受最尖端的技術(shù),保持項(xiàng)目的先進(jìn)性。其中對(duì) v8 的升級(jí)幾乎做到了與 Chromium / Google Chrome 同步,達(dá)到了 4.5.x,它提供了很多新的語言功能。ECMA-262 是 JavaScript 語言規(guī)范的最新版本,而且好多新特性數(shù)都是開箱即用的。

這些新特性包括:

classes - 各種 ‘類’,再也無需用 CoffeeScript 的語法糖寫類了

generators - 未來的.js 代碼中將有無數(shù)生成器,不學(xué)一點(diǎn)就看不懂 JS 代碼了哦

collections - 集合、映射、弱集合、弱映射

arrow functions - 箭向函數(shù)

block scoping - 使用 let 、const 作用域,塊轄域

template strings - 模板字串

promises - 用標(biāo)準(zhǔn)化了的方法進(jìn)行延遲和異步計(jì)算

symbols - 唯一的、不可修改的數(shù)據(jù)

嚴(yán)格模式

嚴(yán)格模式在語義上與正常的JavaScript有一些不同。

首先,嚴(yán)格模式會(huì)將JavaScript陷阱直接變成明顯的錯(cuò)誤。

其次,嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯(cuò)誤:同樣的代碼有些時(shí)候嚴(yán)格模式會(huì)比非嚴(yán)格模式下更快。

第三,嚴(yán)格模式禁用了一些有可能在未來版本中定義的語法。

因?yàn)槲覀僂CMAScript 6中的一些特性,必須在嚴(yán)格模式下,才可以使用,而不報(bào)錯(cuò)。

嚴(yán)格模式可以應(yīng)用到整個(gè)script標(biāo)簽或某個(gè)別函數(shù)中。

為整個(gè)script標(biāo)簽開啟嚴(yán)格模式, 需要在所有語句之前放一個(gè)特定語句 “use strict”; (或 ‘use strict’;)

// 整個(gè)語句都開啟嚴(yán)格模式的語法
"use strict";
 let v = "Hi!  I"m a strict mode script!";

同樣的,要給某個(gè)函數(shù)開啟嚴(yán)格模式,得把 “use strict”; (或 ‘use strict’; )聲明一字不漏地放在函數(shù)體所有語句之前。

function strict()
{
// 函數(shù)級(jí)別嚴(yán)格模式語法
"use strict";
return "Hi! I"m a strict mode function!" ;
}
function notStrict() { 
return "I"m not strict.";
}
let

let 允許把變量的作用域限制在塊級(jí)域中。與 var 不同處是:var 申明變量要么是全局的,要么是函數(shù)級(jí)的,而無法是塊級(jí)的。

let vs var

let的作用域是塊,而var的作用域是函數(shù)

"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在循環(huán)中

可以使用let關(guān)鍵字綁定變量在循環(huán)的范圍而不是使用一個(gè)全局變量(使用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

上面報(bào)錯(cuò),因?yàn)樽兞縤不存在于for語句外的作用域中。let創(chuàng)建塊級(jí)作用域變量的,使用var創(chuàng)建一個(gè)全局變量。

const

const這個(gè)聲明創(chuàng)建一個(gè)常量,可以全局或局部的函數(shù)聲明。

一個(gè)常量可以是全局的或者是局部的,常量遵循與變量相同的作用域規(guī)則。

一個(gè)常量不可以被重新賦值,并且不能被重復(fù)聲明.所以,雖然可以在聲明一個(gè)常量的時(shí)候不進(jìn)行初始化,但這樣做是沒有意義的,因?yàn)檫@個(gè)常量的值永遠(yuǎn)會(huì)保持undefined。

一個(gè)常量不能和它所在作用域內(nèi)的其他變量或函數(shù)擁有相同的名稱。

示例
下面的例子演示了常量的行為。

const num = 10;
num =20;
console.log(num); // 10

如果我們?cè)谏厦媛暶鞒A縩um,在聲明var num,這時(shí)會(huì)報(bào)錯(cuò),num已經(jīng)聲明。

const num = 10;
var num = 20;
console.log(num); // "num" has already been declared
塊級(jí)作用域

很多語言中都有塊級(jí)作用域,JavaScript使用var聲明變量,以function來劃分作用域,大括號(hào)“{}” 卻限定不了var的作用域。用var聲明的變量具有變量提升(declaration hoisting)的效果。

ES6里增加了一個(gè)let,可以在{}, if, for里聲明。用法同var,但作用域限定在塊級(jí),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();
類聲明和類表達(dá)式

ES6 中的類實(shí)際上就是個(gè)函數(shù),而且正如函數(shù)的定義方式有函數(shù)聲明和函數(shù)表達(dá)式兩種一樣,類的定義方式也有兩種,分別是:類聲明、類表達(dá)式。

類聲明

  類聲明是定義類的一種方式,就像下面這樣,使用 class 關(guān)鍵字后跟一個(gè)類名(這里是 Ploygon),就可以定義一個(gè)類。

"use strict";
class Polygon {
    constructor(height, width) {
    
    this.height = height;
    this.width = width;
    }
}
變量提升

  類聲明和函數(shù)聲明不同的一點(diǎn)是,函數(shù)聲明存在變量提升現(xiàn)象,而類聲明不會(huì)。也就是說,你必須先聲明類,然后才能使用它,否則代碼會(huì)拋出 ——ReferenceError 異常,像下面這樣:

var p = new Polygon(); // ReferenceError

class Polygon {}
類表達(dá)式

類表達(dá)式是定義類的另外一種方式,就像函數(shù)表達(dá)式一樣,在類表達(dá)式中,類名是可有可無的。如果定義了類名,則該類名只有在類體內(nèi)部才能訪問到。

"use strict";
// 匿名類表達(dá)式
var Polygon = class {
    constructor(height, width) {
    
    this.height = height;
    this.width = width;
    }
};
// 命名類表達(dá)式
var Polygon = class Polygon {
    constructor(height, width) {
    
    this.height = height;
    this.width = width;
    }
};
構(gòu)造函數(shù)

類的成員需要定義在一對(duì)花括號(hào) {} 里,花括號(hào)里的代碼和花括號(hào)本身組成了類體。類成員包括類構(gòu)造器和類方法(包括靜態(tài)方法和實(shí)例方法)。

class 根據(jù) constructor 方法來創(chuàng)建和初始化對(duì)象。

constructor方法是類的默認(rèn)方法,通過new命令生成對(duì)象實(shí)例時(shí),自動(dòng)調(diào)用該方法。一個(gè)類只能有一個(gè)constructor方法,如果沒有顯式定義,一個(gè)空的constructor方法會(huì)被默認(rèn)添加。

constructor() {}
constructor方法默認(rèn)返回實(shí)例對(duì)象(即this),完全可以指定返回另外一個(gè)對(duì)象。

"use strict";
class Foo {
    constructor() {   
          return Object.create(null);
    }
}
new Foo() instanceof Foo
// false

上面代碼中,constructor函數(shù)返回一個(gè)全新的對(duì)象,結(jié)果導(dǎo)致實(shí)例對(duì)象不是Foo類的實(shí)例。

constructor 方法是一個(gè)特殊的類方法,它既不是靜態(tài)方法也不是實(shí)例方法,它僅在實(shí)例化一個(gè)類的時(shí)候被調(diào)用。一個(gè)類只能擁有一個(gè)名為 constructor 的方法,否則會(huì)拋出 SyntaxError 異常。

嚴(yán)格模式

類和模塊的內(nèi)部,默認(rèn)就是嚴(yán)格模式,所以不需要使用use strict指定運(yùn)行模式。只要你的代碼寫在類或模塊之中,就只有嚴(yán)格模式可用。

靜態(tài)方法

static關(guān)鍵字定義了一個(gè)類的靜態(tài)方法。靜態(tài)方法被稱為無需實(shí)例化類也可當(dāng)類被實(shí)例化。靜態(tài)方法通常用于為應(yīng)用程序創(chuàng)建實(shí)用函數(shù)。

示例

"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 關(guān)鍵字創(chuàng)建子類

extends 關(guān)鍵字可以用來創(chuàng)建繼承于某個(gè)類的子類。

這個(gè)例子是根據(jù)名為Animal類創(chuàng)建一個(gè)名為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();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78277.html

相關(guān)文章

  • 聽閏土大話前端之ES6是怎么來的

    摘要:前言相信做前端的朋友沒有不知道的,都知曉新增了不少新的特性,但是你知道是怎么來的嗎今天就讓閏土來帶大家大話的前世今生。之前可能是自己娛樂為主,大家來旁觀為輔。還有一個(gè)比較大的版本就是,它是年正式誕生的。大話前端系列文章較長(zhǎng),未完待續(xù)。 showImg(https://segmentfault.com/img/bV4pck?w=1280&h=693); 前言 相信做前端的朋友沒有不知道E...

    BaronZhang 評(píng)論0 收藏0
  • 精讀《Nodejs V12》

    摘要:更好的安全性隨著的發(fā)布,從升級(jí)到了,更安全且更易配置。通過使用,程序可以減少握手所需時(shí)間來提升請(qǐng)求性能。提供診斷報(bào)告有一項(xiàng)實(shí)驗(yàn)功能,根據(jù)用戶需求提供診斷報(bào)告,包括崩潰性能下降內(nèi)存泄露使用高等等。前端精讀幫你篩選靠譜的內(nèi)容。 1. 引言 Node12 發(fā)布有幾個(gè)月了,讓我們跟隨 Nodejs 12 一起看看 Node12 帶來了哪些改變。 2. 概述 Node12 與以往的版本不同,帶來...

    CoderStudy 評(píng)論0 收藏0
  • 前端面試題大集合:來自真實(shí)大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@??途W(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長(zhǎng)期一個(gè)一個(gè)的記錄下來的,可能會(huì)有重復(fù),但基本前端的面試大綱和需要掌握的知識(shí)都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識(shí)需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識(shí)鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對(duì)比,兩者中間件的原理,koa捕獲異常多種情...

    Kerr1Gan 評(píng)論0 收藏0
  • 前端面試題大集合:來自真實(shí)大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長(zhǎng)期一個(gè)一個(gè)的記錄下來的,可能會(huì)有重復(fù),但基本前端的面試大綱和需要掌握的知識(shí)都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識(shí)需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識(shí)鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對(duì)比,兩者中間件的原理,koa捕獲異常多種情...

    lushan 評(píng)論0 收藏0
  • 前端面試題大集合:來自真實(shí)大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長(zhǎng)期一個(gè)一個(gè)的記錄下來的,可能會(huì)有重復(fù),但基本前端的面試大綱和需要掌握的知識(shí)都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識(shí)需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識(shí)鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對(duì)比,兩者中間件的原理,koa捕獲異常多種情...

    joyvw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<