摘要:的包管理器,是全球最大的開源庫生態系統。函數級別嚴格模式語法允許把變量的作用域限制在塊級域中。這個聲明創建一個常量可以全局或局部的函數聲明。方法默認返回實例對象即,完全可以指定返回另外一個對象。一個類只能擁有一個名為的方法,否則會拋出異常。
簡介
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創建一個全局變量。
constconst這個聲明創建一個常量,可以全局或局部的函數聲明。
一個常量可以是全局的或者是局部的,常量遵循與變量相同的作用域規則。
一個常量不可以被重新賦值,并且不能被重復聲明.所以,雖然可以在聲明一個常量的時候不進行初始化,但這樣做是沒有意義的,因為這個常量的值永遠會保持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://specialneedsforspecialkids.com/yun/78277.html
摘要:前言相信做前端的朋友沒有不知道的,都知曉新增了不少新的特性,但是你知道是怎么來的嗎今天就讓閏土來帶大家大話的前世今生。之前可能是自己娛樂為主,大家來旁觀為輔。還有一個比較大的版本就是,它是年正式誕生的。大話前端系列文章較長,未完待續。 showImg(https://segmentfault.com/img/bV4pck?w=1280&h=693); 前言 相信做前端的朋友沒有不知道E...
摘要:更好的安全性隨著的發布,從升級到了,更安全且更易配置。通過使用,程序可以減少握手所需時間來提升請求性能。提供診斷報告有一項實驗功能,根據用戶需求提供診斷報告,包括崩潰性能下降內存泄露使用高等等。前端精讀幫你篩選靠譜的內容。 1. 引言 Node12 發布有幾個月了,讓我們跟隨 Nodejs 12 一起看看 Node12 帶來了哪些改變。 2. 概述 Node12 與以往的版本不同,帶來...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
閱讀 3022·2021-11-18 10:07
閱讀 3765·2021-11-17 17:00
閱讀 2103·2021-11-15 18:01
閱讀 926·2021-10-11 10:58
閱讀 3373·2021-09-10 10:50
閱讀 3442·2021-08-13 15:05
閱讀 1229·2019-08-30 15:53
閱讀 2640·2019-08-29 13:01