ReactNative開發必備ES6知識
引言
現代前端應用通常都會使用ES6進行開發,ReactNative專案同樣也會使用ES6進行開發,對於現代前端專案開發來說,掌握ES6成為一件十分必要的事情。對於ES6的學習,通常都會閱讀阮一峰的《ECMAScript 6 入門》,以下這本書中開發ReactNative必備的知識點。
ECMAScript 6簡介
ECMAScript6(以下簡稱ES6)是JavaScript語言的下一代標準,它的目標是讓JavaScript語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。
let和const命令
ES6新增了let命令,用來宣告變數,它的用法類似於var,但是所宣告的變數,只在let命令所在的程式碼塊內有效。const宣告一個只讀的常量,一旦宣告,常量的值就不能變化。
變數的解構賦值
ES6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。
函式的擴充套件
- ES6能直接為函式的引數指定預設值
- 引數預設值可以與解構賦值的預設值,結合起來使用。
- 通常情況下,定義了預設值的引數,應該是函式的尾引數
-
指定了預設值以後,函式的
length
屬性,將返回沒有指定預設值的引數個數。 - 一旦設定了引數的預設值,函式進行宣告初始化時,引數會形成一個單獨的作用域(context)。等到初始化結束,這個作用域就會消失。
- 利用引數預設值,可以指定某一個引數不得省略,如果省略就丟擲一個錯誤。
-
ES6 引入 rest 引數(形式為
...變數名
),用於獲取函式的多餘引數,這樣就不需要使用arguments
物件了。 -
函式的
name
屬性,返回該函式的函式名。 -
ES6 允許使用“箭頭”(
=>
)定義函式。 - 箭頭函式內部,還可以再使用箭頭函式。
- 尾呼叫(Tail Call)是函數語言程式設計的一個重要概念,本身非常簡單,一句話就能說清楚,就是指某個函式的最後一步是呼叫另一個函式。
陣列的擴充套件
-
擴充套件運算子(spread)是三個點(
...
)。它好比 rest 引數的逆運算,將一個陣列轉為用逗號分隔的引數序列。 -
由於擴充套件運算子可以展開陣列,所以不再需要
apply
方法,將陣列轉為函式的引數了。 - 陣列是複合的資料型別,直接複製的話,只是複製了指向底層資料結構的指標,而不是克隆一個全新的陣列。
- 擴充套件運算子提供了陣列合並的新寫法。
- 擴充套件運算子可以與解構賦值結合起來,用於生成陣列。
- 擴充套件運算子還可以將字串轉為真正的陣列。
-
fill
方法使用給定值,填充一個陣列。 -
ES6 提供三個新的方法——
entries()
,keys()
和values()
——用於遍歷陣列。它們都返回一個遍歷器物件
物件的擴充套件
-
ES6 允許直接寫入變數和函式,作為物件的屬性和方法。這樣的書寫更加簡潔。
JavaScript 定義物件的屬性,有兩種方法。 -
函式的
name
屬性,返回函式名。物件方法也是函式,因此也有name
屬性。 -
ES6 提出“Same-value equality”(同值相等)演算法,用來解決這個問題。
Object.is
就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。 -
Object.assign
方法用於物件的合併,將源物件(source)的所有可列舉屬性,複製到目標物件(target)。 -
Object.assign
方法有很多用處。 - 物件的每個屬性都有一個描述物件(Descriptor),用來控制該屬性的行為。
- ES6 一共有 5 種方法可以遍歷物件的屬性。
-
我們知道,
this
關鍵字總是指向函式所在的當前物件,ES6 又新增了另一個類似的關鍵字super
,指向當前物件的原型物件。
Promise物件
- Promise 是非同步程式設計的一種解決方案,比傳統的解決方案——回撥函式和事件——更合理和更強大
- ES6 規定,
Promise
物件是一個建構函式,用來生成Promise
例項。 -
Promise 例項具有
then
方法,也就是說,then
方法是定義在原型物件Promise.prototype
上的。它的作用是為 Promise 例項新增狀態改變時的回撥函式。前面說過,then
方法的第一個引數是resolved
狀態的回撥函式,第二個引數(可選)是rejected
狀態的回撥函式。
Iterator 和 for…of 迴圈
- 遍歷器(Iterator)就是這樣一種機制。它是一種介面,為各種不同的資料結構提供統一的訪問機制。任何資料結構只要部署 Iterator 介面,就可以完成遍歷操作(即依次處理該資料結構的所有成員)。
-
Iterator 介面的目的,就是為所有資料結構,提供了一種統一的訪問機制,即
for...of
迴圈 -
有一些場合會預設呼叫 Iterator 介面(即
Symbol.iterator
方法),除了下文會介紹的for...of
迴圈,還有幾個別的場合 - 字串是一個類似陣列的物件,也原生具有 Iterator 介面。
-
Symbol.iterator
方法的最簡單實現,還是使用下一章要介紹的 Generator 函式。 -
遍歷器物件除了具有
next
方法,還可以具有return
方法和throw
方法。如果你自己寫遍歷器物件生成函式,那麼next
方法是必須部署的,return
方法和throw
方法是否部署是可選的。 -
ES6 借鑑 C++、Java、C# 和 Python 語言,引入了
for...of
迴圈,作為遍歷所有資料結構的統一的方法。
Class的基本語法
-
ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作為物件的模板。通過
class
關鍵字,可以定義類。 -
constructor
方法是類的預設方法,通過new
命令生成物件例項時,自動呼叫該方法。一個類必須有constructor
方法,如果沒有顯式定義,一個空的constructor
方法會被預設新增。 -
生成類的例項物件的寫法,與 ES5 完全一樣,也是使用
new
命令。前面說過,如果忘記加上new
,像函式那樣呼叫Class
,將會報錯。 - 與函式一樣,類也可以使用表示式的形式定義。
- 類不存在變數提升(hoist),這一點與 ES5 完全不同。
-
類的方法內部如果含有
this
,它預設指向類的例項。但是,必須非常小心,一旦單獨使用該方法,很可能報錯。 -
類相當於例項的原型,所有在類中定義的方法,都會被例項繼承。如果在一個方法前,加上
static
關鍵字,就表示該方法不會被例項繼承,而是直接通過類來呼叫,這就稱為“靜態方法”。
Class的繼承
-
Class 可以通過
extends
關鍵字實現繼承,這比 ES5 的通過修改原型鏈實現繼承,要清晰和方便很多。 -
Object.getPrototypeOf
方法可以用來從子類上獲取父類。 -
super
這個關鍵字,既可以當作函式使用,也可以當作物件使用。在這兩種情況下,它的用法完全不同。 -
extends
關鍵字後面可以跟多種型別的值。
Module的語法
- ES6 模組的設計思想是儘量的靜態化,使得編譯時就能確定模組的依賴關係,以及輸入和輸出的變數。CommonJS 和 AMD 模組,都只能在執行時確定這些東西。比如,CommonJS 模組就是物件,輸入時必須查詢物件屬性。
-
ES6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上
"use strict";
。 -
模組功能主要由兩個命令構成:
export
和import
。export
命令用於規定模組的對外介面,import
命令用於輸入其他模組提供的功能。 -
使用
export
命令定義了模組的對外介面以後,其他 JS 檔案就可以通過import
命令載入這個模組。 -
除了指定載入某個輸出值,還可以使用整體載入,即用星號(
*
)指定一個物件,所有輸出值都載入在這個物件上面。 -
為了給使用者提供方便,讓他們不用閱讀文件就能載入模組,就要用到
export default
命令,為模組指定預設輸出。
程式設計風格
-
ES6 提出了兩個新的宣告變數的命令:
let
和const
。其中,let
完全可以取代var
,因為兩者語義相同,而且let
沒有副作用。 -
在
let
和const
之間,建議優先使用const
,尤其是在全域性環境,不應該設定變數,只應設定常量。 - 靜態字串一律使用單引號或反引號,不使用雙引號。動態字串使用反引號。
- 使用陣列成員對變數賦值時,優先使用解構賦值。
- 單行定義的物件,最後一個成員不以逗號結尾。多行定義的物件,最後一個成員以逗號結尾。
- 使用擴充套件運算子(…)拷貝陣列。
- 立即執行函式可以寫成箭頭函式的形式。
-
注意區分 Object 和 Map,只有模擬現實世界的實體物件時,才使用 Object。如果只是需要
key: value
的資料結構,使用 Map 結構。因為 Map 有內建的遍歷機制。 - 總是用 Class,取代需要 prototype 的操作。因為 Class 的寫法更簡潔,更易於理解。
-
首先,Module 語法是 JavaScript 模組的標準寫法,堅持使用這種寫法。使用
import
取代require
。 - ESLint 是一個語法規則和程式碼風格的檢查工具,可以用來保證寫出語法正確、風格統一的程式碼。
原文釋出時間為:2018年06月21日
原文作者:芒言
本文來源: 掘金 如需轉載請聯絡原作者
相關文章
- 容器雲開發必備知識
- 資料庫開發必備知識介紹資料庫
- 後端開發必備的 RestFul API 知識後端RESTAPI
- 前端開發者必備的快取知識總結前端快取
- 必備知識點 模版
- 必備知識點 路由路由
- css必備知識點CSS
- 必備知識點 檢視
- 網路基礎必備知識
- OpenStack必備基礎知識
- 前端必備知識點—SVG前端SVG
- 大前端開發人員必知必會的HTTP知識前端HTTP
- 必備知識點 模型層ORM模型ORM
- 安裝Linux之前必備知識Linux
- Redis 面試必備知識點Redis面試
- Hybrid App 應用開發中 5 個必備知識點複習APP
- 高階前端開發人員必備工具-Node.JS知識講解前端Node.js
- day04 必備基礎知識
- 前端進階必備知識彙總前端
- 騰訊 PHP 面試必備知識PHP面試
- Web前端必備-Nginx知識彙總Web前端Nginx
- 效能測試必備基礎知識(二)
- Python 基礎(一):入門必備知識Python
- Java面試題必備知識之ThreadLocalJava面試題thread
- JVM調優必備理論知識-GCCollectorJVMGC
- Python 必備面試基礎知識-3Python面試
- Python 面試必備基礎知識-1Python面試
- 程式猿必備的Linux基礎知識Linux
- 機器學習之必備知識篇機器學習
- Python入門必備知識點總結Python
- 程式必備區塊鏈基礎知識區塊鏈
- linux嵌入式程式設計開發必備知識,這些你都要知道Linux程式設計
- 千萬淘寶店運營必備知識,你必須知道!
- 學習網路BGP必備基礎知識
- 爬蟲必須得會的預備知識爬蟲
- 年終小盤點:這十八個Android開發必備知識點,你都知道嗎?Android
- Hybrid App 應用 開發中 9 個必備知識點複習(WebView / 除錯 等)APPWebView除錯
- Mac 開發必備工具Mac