Javascript ES6幾個(gè)重要的新特性

Arrow functions 箭頭函數(shù)

function的簡(jiǎn)略寫法,但是無法使用this

// 箭頭函數(shù)
var odds = evens.map(v => v + 1);
var nums = evens.map ((v, i) => v + i);
var pairs = evens.map(v => ({even: v, odd: v + 1}));

// 普通函數(shù)
var odds = evens.map(function (v) {
  return v + 1;
});
var nums = evens.map(function (v, i) {
  return v + i;
});
var pairs = evens.map(function (v) {
  return {
    even: v,
    odd: v + 1
}});

String interpolation 字符串內(nèi)插

支持在字符串內(nèi)插入變量,使用``代替""
同樣支持字符串內(nèi)換行代替/n

var name = "Bob", time = "today";
var multiLine = `This
Line
Spans Multiple
Lines`

console.log (`Hello ${name}, how are you ${time}?`}
console.log(multiline)

Destructuring 解構(gòu)

支持從數(shù)組和對(duì)象中提取值,要求提取來源為可迭代(遍歷)的結(jié)構(gòu),同樣可以用于嵌套的對(duì)象

// 數(shù)組解構(gòu)
var [a, , b] = [1,2,3];
console.log(a)  // 1
console.log(b)  // 3

// 對(duì)象解構(gòu)
nodes = () => { return {op: "a", lhs: "b", rhs: "c"}}
var { op: a, lhs: b , rhs: c } = nodes()
var {op, lhs, rhs} = nodes()  //簡(jiǎn)化版,變量名與屬性名一致

console.log(a)  // "a"
console.log(b)  // "b"
console.log(c)  // "c"

Default 函數(shù)默認(rèn)參數(shù)

function f(x, y=12) {
  return x + y;
}

console.log(f(3))  // 15

Spread 擴(kuò)展運(yùn)算符

擴(kuò)展運(yùn)算符是...

// 數(shù)組
var parts = ["shoulders", "knees"];
var lyrics = ["head", ...parts, "and", "toes"]; 
console.log(lyrics)  // ["head","shoulders","knees","and","toes"]

//對(duì)象
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }

let n = { x, y, ...z };
console.log(n); // { x: 1, y: 2, a: 3, b: 4 }

Rest

function demo(part1, ...part2) {
    return {part1, part2}
}

console.log(demo(1,2,3,4,5,6))  // {"part1":1,"part2":[2,3,4,5,6]}

新變量:let與const

let聲明的變量只在它所在的代碼塊有效,在同一個(gè)代碼塊(作用域)下,不可以重復(fù)聲明,可以被重新賦值。

// 只在所在代碼塊有效
{
   var globalVar = "from demo1"
}

{
   let globalLet = "from demo2";
}
console.log(globalVar)  // "from demo1"
console.log(globalLet)  // ReferenceError: globalLet is not defined

// 同一代碼塊不能重復(fù)聲明(redeclare)
var me = "foo";
var me = "bar"; 
console.log(me)  // "bar"

let me = "foo";
let me = "bar"; 
console.log(me);  // SyntaxError: Identifier 'me' has already been declared

const聲明的常量只在它所在的代碼塊有效,在同一個(gè)代碼塊(作用域)下,不可以重復(fù)聲明,并且不可以被重新賦值(基本類型的數(shù)據(jù))。const是read-only variables。

// 只讀常量,非變量,不可以被重新賦值
const a = "b"
a = "a"  // TypeError: Assignment to constant variable.

//可以被改變(mutated)
const a = { a: "a" }
a.a = "b"
console.log(a)  // {"a":"b"}

Promises

異步編程

var p1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("1"), 101)
})
var p2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("2"), 100)
})

Promise.race([p1, p2]).then((res) => {
   console.log(res)
})

Promise.all([p1, p2]).then((res) => {
   console.log(res)
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,915評(píng)論 0 1
  • let 和 const 命令 let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 gl...
    安小明閱讀 1,043評(píng)論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,199評(píng)論 1 10
  • 1. Babel 轉(zhuǎn)碼器 Babel 是一個(gè)廣泛使用的 ES6 轉(zhuǎn)碼器,可以將 ES6 代碼轉(zhuǎn)為 ES5 代碼,從...
    Metallica_d8b1閱讀 295評(píng)論 0 0
  • 有且只有當(dāng)你展露出自己獨(dú)特的能力,讓自己從此與眾不同也就是說,我們擁有了核心競(jìng)爭(zhēng)力,我們才能從此一敗涂地。那這個(gè)能...
    春風(fēng)十里木有一路桃花閱讀 173評(píng)論 0 1

友情鏈接更多精彩內(nèi)容