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)
})