目錄
箭頭函數
類別Class
增強的物件字面量
模板字串
解構賦值
Default + Rest + Spread
Let + Const
迭代器
生成器 Generators
Unicode
首頁 web前端 js教程 JS之--ES 2015/6 新特性匯總

JS之--ES 2015/6 新特性匯總

Jun 26, 2017 pm 12:01 PM
匯總 特性

ES 2015/6 新增內容還是比較多的,這裡僅大綱性的列舉一下(不一定全面)這些特性。其實,每個點挖進去都會有很多學問在裡頭,本文旨在匯總,所以不對這些特性進行深層的討論及研究。隨後若有時間,再單獨寫幾篇部落格對常用的點進行深挖,與大家進行深度交流。

箭頭函數

箭頭函數,透過 => 語法實作的函數簡寫形式,C#/JAVA8/CoffeeScript 都有類似語法。與函數不同,箭頭函數與其執行下文環境共用同一個 this。如果一個箭頭函數出現在函數物件內部,它會與這個函數共用 arguments 變數。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

// Expression bodiesvar odds = evens.map(v => v + 1);var nums = evens.map((v, i) => v + i);// Statement bodiesnums.forEach(v => {

  if (v % 5 === 0)    fives.push(v);});// Lexical thisvar bob = {

  _name: "Bob",

  _friends: ['jim'],

  printFriends() {

    this._friends.forEach(f =>

      console.log(this._name + " knows " + f)); // Bob knows jim

  }};// Lexical argumentsfunction square() {

  let example = () => {

    let numbers = [];

    for (let number of arguments) {

      numbers.push(number * number);

    }

 

    return numbers;

  };

 

  return example();}square(2, 4, 7.5, 8, 11.5, 21); // returns: [4, 16, 56.25, 64, 132.25, 441]

登入後複製


類別Class

Javascript 類別 並不是引進了一個新的物件導向的物件繼承模型,而是基於原型繼承的語法糖。其提供了一個更簡單和清晰的語法來創建物件並處理繼承。


1

2

3

4

5

class Rectangle {

  constructor(height, width) {

    this.height = height;

    this.width = width;

  }}

登入後複製


類別沒有宣告提升,必須確保在呼叫前已經進行了宣告。

建構子 constructor 是一個特殊的方法,其用於建立和初始化類別的實例。

靜態方法static 關鍵字用於聲明靜態方法

建立子類別extends 關鍵字用於建立子類,這裡要注意: extends 不能用來擴充常規物件(不可建構/非建構的),如果要繼承常規對象,可使用Object.setPrototypeOf()

呼叫超類別super 關鍵字可以用來呼叫父類別中的方法

Mix-ins 混合

增強的物件字面量

透過字面量形式可以實現,定義prototype、鍵值對簡寫、定義方法等、動態屬性名稱。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

var obj = {

    // Sets the prototype. "__proto__" or '__proto__' would also work.

    __proto__: theProtoObj,

    // Computed property name does not set prototype or trigger early error for

    // duplicate __proto__ properties.

    ['__proto__']: somethingElse,

    // Shorthand for ‘handler: handler’

    handler,

    // Methods

    toString() {

     // Super calls

     return "d " + super.toString();

    },

    // Computed (dynamic) property names

    [ "prop_" + (() => 42)() ]: 42};

登入後複製


模板字串

模板字串提供建構字串的語法糖,在Prel/python 等語言中也都有類似特性。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// Basic literal string creation

`This is a pretty little template string.`

 

// Multiline strings

`In ES5 this is

 not legal.`

 

// Interpolate variable bindings

var name = "Bob", time = "today";

`Hello ${name}, how are you ${time}?`

 

// Unescaped template strings

String.raw`In ES5 "\n" is a line-feed.`

 

// Construct an HTTP request prefix is used to interpret the replacements and construction

GET`http://foo.org/bar?a=${a}&b=${b}

    Content-Type: application/json

    X-Credentials: ${credentials}

    { "foo": ${foo},

      "bar": ${bar}}`(myOnReadyStateChangeHandler);

登入後複製

解構賦值

Destructuring 法是一個Javascript表達式,這使得可以將值從陣列或屬性從物件提取到不同的變數中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

// list matching

var [a, ,b] = [1,2,3];

a === 1;

b === 3;

 

// object matching (用新变量名赋值)

var { op: a, lhs: { op: b }, rhs: c }

       = getASTNode()

 

// object matching shorthand

// binds `op`, `lhs` and `rhs` in scope

var {op, lhs, rhs} = getASTNode()

 

// Can be used in parameter position

function g({name: x}) {

  console.log(x);

}

g({name: 5})

 

// Fail-soft destructuring

var [a] = [];

a === undefined;

 

// Fail-soft destructuring with defaults

var [a = 1] = [];

a === 1;

 

// 变量可以先赋予默认值。当要提取的对象没有对应的属性,变量就被赋予默认值。

var {a = 10, b = 5} = {a: 3};

console.log(a); // 3

console.log(b); // 5

 

// Destructuring + defaults arguments

function r({x, y, w = 10, h = 10}) {

  return x + y + w + h;

}

r({x:1, y:2}) === 23

 

// 对象属性计算名和解构

let key = "z";

let { [key]: foo } = { z: "bar" };

 

console.log(foo); // "bar"

登入後複製

Default + Rest + Spread

為函數參數提供預設值& ... 定數量參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

function f(x, y=12) {

  // y is 12 if not passed (or passed as undefined)

  return x + y;

}

f(3) == 15

 

 

function f(x, ...y) {

  // y is an Array

  return x * y.length;

}

f(3, "hello", true) == 6

 

 

 

function f(x, y, z) {

  return x + y + z;

}

// Pass each elem of array as argument

f(...[1,2,3]) == 6

登入後複製

Let + Const

let 用來宣告區塊層級作用域變數。 const 用來宣告常數。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function f() {

  {

    let x;

    {

      // this is ok since it's a block scoped name

      const x = "sneaky";

      // error, was just defined with `const` above

      x = "foo";

    }

    // this is ok since it was declared with `let`

    x = "bar";

    // error, already declared above in this block

    let x = "inner";

  }

}

登入後複製

迭代器

透過 symbol.iterator 可建立自訂迭代器。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

let fibonacci = {

  [Symbol.iterator]() {

    let pre = 0, cur = 1;

    return {

      next() {

        [pre, cur] = [cur, pre + cur];

        return { done: false, value: cur }

      }

    }

  }

}

 

for (var n of fibonacci) {

  // truncate the sequence at 1000

  if (n > 1000)

    break;

  console.log(n);

}

登入後複製


生成器 Generators

普通函數使用function聲明,而生成器函數使用function*聲明。

在生成函數內部,有一種類似return的語法:關鍵字yield。二者的差別是,普通函數只可以return一次,而生成器函數可以yield多次(當然也可以只yield一次)。在生成器的執行過程中,遇到yield表達式立即暫停,後續可恢復執行狀態。

1

2

3

4

5

6

7

8

function* quips(name) {

  yield "你好 " + name + "!";

  yield "希望你能喜欢这篇介绍ES6的译文";

  if (name.startsWith("X")) {

    yield "你的名字 " + name + "  首字母是X,这很酷!";

  }

  yield "我们下次再见!";

}

登入後複製

Unicode

// same as ES5.1
"
登入後複製

以上是JS之--ES 2015/6 新特性匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
win7家庭版與win7旗艦版的差異介紹 win7家庭版與win7旗艦版的差異介紹 Jul 12, 2023 pm 08:41 PM

大家都知道win7系統有很多種版本,像是win7旗艦版、win7專業版、win7家用版等,有不少用戶在家庭版和旗艦版之間糾結,不知道選擇哪個版本比較好,所以今天小編來跟大家說說win7家庭餐與win7旗艦版的差別介紹,大家一起來看看。 1.體驗不同家庭普通版使您的日常操作變得更快、更簡單,可以更快、更方便地存取使用最頻繁的程式和文件。家庭高級版讓您享有最佳的娛樂體驗,可以輕鬆欣賞和分享您喜愛的電視節目、照片、影片和音樂。旗艦版集各版本功能大全,具備Windows7家庭高級版的所有娛樂功能與專

掌握Spring MVC的關鍵概念:了解這些重要特性 掌握Spring MVC的關鍵概念:了解這些重要特性 Dec 29, 2023 am 09:14 AM

了解SpringMVC的關鍵特性:掌握這些重要的概念,需要具體程式碼範例SpringMVC是一種基於Java的Web應用開發框架,它透過模型-視圖-控制器(MVC)的架構模式來幫助開發人員建立靈活可擴展的Web應用程式。了解和掌握SpringMVC的關鍵特性將使我們能夠更有效地開發和管理我們的網路應用程式。本文將介紹一些SpringMVC的重要概念

Golang中有類似類別的物件導向特性嗎? Golang中有類似類別的物件導向特性嗎? Mar 19, 2024 pm 02:51 PM

在Golang(Go語言)中並沒有傳統意義上的類別的概念,但它提供了一種稱為結構體的資料類型,透過結構體可以實現類似類別的物件導向特性。在本文中,我們將介紹如何使用結構體實現物件導向的特性,並提供具體的程式碼範例。結構體的定義和使用首先,讓我們來看看結構體的定義和使用方式。在Golang中,結構體可以透過type關鍵字定義,然後在需要的地方使用。結構體中可以包含屬

整理Win11的錯誤和問題 整理Win11的錯誤和問題 Jan 13, 2024 pm 08:21 PM

有些人想更新win11,但不知道win11bug多嗎,更新會不會出問題,實作在win11有bug,不過對使用影響不大。 win11bug多嗎:答:win11bug現在還是比較多的。不過這些bug對於日常使用的影響不大。如果使用者對於日常的使用要求很高的話,建議還是晚點再使用吧。 win11bug匯總一、資源管理器1、有時候會出現記憶體溢出,導致資源管理器記憶體佔用高。 2.這種情況會導致記憶體佔用超過70%,電腦卡頓、甚至崩潰。二、衝突死機1、部分應用程式相容性不足,導致互相衝突。 2、雖然衝突程序比較少,

選擇適用的Go版本,依需求和特性 選擇適用的Go版本,依需求和特性 Jan 20, 2024 am 09:28 AM

隨著網路的快速發展,程式語言也不斷演化和更新。其中,Go語言作為一種開源的程式語言,在近年來備受關注。 Go語言的設計目標是簡單、有效率、安全且易於開發和部署。它具有高並發、快速編譯和記憶體安全等特性,讓它在Web開發、雲端運算和大數據等領域中有著廣泛的運用。然而,目前Go語言也有不同的版本可供選擇。在選擇合適的Go語言版本時,我們需要考慮需求和特性兩個面向。首

5g的三個特性是什麼 5g的三個特性是什麼 Dec 09, 2020 am 10:55 AM

5g的三個特性是:1、高速率;在實際應用中,5G網路的速率是4G網路10倍以上。 2、低時延;5G網路的時延約幾十毫秒,比人的反應速度還要快。 3.廣連結;5G網路出現,配合其他技術,將會打造一個全新的萬物互聯景象。

C++ 函式的型別和特性 C++ 函式的型別和特性 Apr 11, 2024 pm 03:30 PM

C++函式有以下型別:簡單函式、const函式、靜態函式、虛函式;特性包括:inline函式、預設參數、參考回傳、重載函式。例如,calculateArea函數使用π計算給定半徑圓的面積,並將其作為輸出傳回。

java的特性是什麼 java的特性是什麼 Aug 09, 2023 pm 03:05 PM

java的特性是:1、簡單易學;2、面向對象,使得程式碼更可重複使用和維護;3、平台無關性,能在不同的作業系統上運作;4、記憶體管理,透過自動垃圾回收機制來管理記憶體;5、強型別檢查,變數在使用前必須先聲明類型;6、安全性,可以防止未經授權的存取和惡意程式碼的執行;7、多執行緒支持,能提高程式的效能和回應能力;8、異常處理,可以避免程式崩潰;9、大量的開發庫和框架;10、開源生態系統。

See all articles