let
var可以重復(fù)聲明同一個(gè)變量亭姥,let進(jìn)行重復(fù)聲明會(huì)在console中報(bào)錯(cuò)傻唾。
var無論如何都會(huì)定義一個(gè)全局變量,而let在block, statement, or expression中定義時(shí)會(huì)定義局部變量奕翔。
const
const定義的變量是只讀的聊记,通常用全大寫字母來命名方便辨識(shí)。const變量無法被重新聲明賦值召娜,但是卻可以被更改运褪,例子如下:
"use strict";
consts=[5,6,7];
s=[1,2,3];// throws error, trying to assign a const
s[2]=45;// works just as it would with an array declared with var or let
console.log(s);// returns [5, 6, 45]
Object.freeze
Object.freeze(object)方法可以用來防止一個(gè)元素被修改。
箭頭函數(shù)
rest 參數(shù)
允許我們將一個(gè)不定數(shù)量的參數(shù)表示為一個(gè)數(shù)組玖瘸。
相對(duì)于解構(gòu)賦值而言秸讹,rest參數(shù)會(huì)代表所有剩余參數(shù),無法單獨(dú)/分別選擇一些參數(shù)雅倒。
function(a,b,...theArgs){
// ...
}
如果函數(shù)的最后一個(gè)命名參數(shù)以...為前綴璃诀,則它將成為一個(gè)由剩余參數(shù)組成的真數(shù)組,其中從0(包括)到theArgs.length(排除)的元素由傳遞給函數(shù)的實(shí)際參數(shù)提供蔑匣。
解構(gòu)賦值 Destructuring Assignment
解構(gòu)賦值語法是一種 Javascript 表達(dá)式劣欢。通過解構(gòu)賦值, 可以將屬性/值從對(duì)象/數(shù)組中取出,賦值給其他變量。
var a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
({ a, b } = { a: 10, b: 20 });
console.log(a); // 10
console.log(b); // 20
// Stage 4(已完成)提案中的特性
({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
console.log(a); // 10
console.log(b); // 20
console.log(rest); // {c: 30, d: 40}
模版字符串 template literal
模板字符串使用反引號(hào) () 來代替普通字符串中的用雙引號(hào)和單引號(hào)裁良。模板字符串可以包含特定語法(${expression})的占位符凿将。占位符中的表達(dá)式和周圍的文本會(huì)一起傳遞給一個(gè)默認(rèn)函數(shù),該函數(shù)負(fù)責(zé)將所有的部分連接起來价脾,如果一個(gè)模板字符串由表達(dá)式開頭牧抵,則該字符串被稱為帶標(biāo)簽的模板字符串,該表達(dá)式通常是一個(gè)函數(shù)侨把,它會(huì)在模板字符串處理后被調(diào)用犀变,在輸出最終結(jié)果前,你都可以通過該函數(shù)來對(duì)模板字符串進(jìn)行操作處理座硕。在模版字符串內(nèi)使用反引號(hào)(`)時(shí)弛作,需要在它前面加轉(zhuǎn)義符(\)。
定義類Class
類實(shí)際上是個(gè)“特殊的函數(shù)”华匾,就像你能夠定義的函數(shù)表達(dá)式和函數(shù)聲明一樣映琳,類語法有兩個(gè)組成部分:類表達(dá)式和類聲明机隙。
類聲明
定義一個(gè)類的一種方法是使用一個(gè)類聲明。要聲明一個(gè)類萨西,你可以使用帶有class關(guān)鍵字的類名(這里是“Rectangle”)有鹿。
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
函數(shù)聲明和類聲明之間的一個(gè)重要區(qū)別是函數(shù)聲明會(huì)提升,類聲明不會(huì)谎脯。你首先需要聲明你的類葱跋,然后訪問它,否則像下面的代碼會(huì)拋出一個(gè)ReferenceError
:
let p = new Rectangle(); // ReferenceError
class Rectangle {}
類表達(dá)式
一個(gè)類表達(dá)式是定義一個(gè)類的另一種方式源梭。類表達(dá)式可以是具名的或匿名的娱俺。
一個(gè)具名類表達(dá)式的名稱是類內(nèi)的一個(gè)局部屬性,它可以通過類本身(而不是類實(shí)例)的name
屬性來獲取废麻。
// 匿名類
let Rectangle = class {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
console.log(Rectangle.name);
// output: "Rectangle"
// 具名類
let Rectangle = class Rectangle2 {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
console.log(Rectangle.name);
// 輸出: "Rectangle2"
import & export 不同js之間的通信
JavaScript Promise
語法:
new Promise( function(resolve, reject) {...} /* executor */ );
executor是帶有 resolve 和 reject 兩個(gè)參數(shù)的函數(shù) 荠卷。Promise構(gòu)造函數(shù)執(zhí)行時(shí)立即調(diào)用executor 函數(shù), resolve 和 reject 兩個(gè)函數(shù)作為參數(shù)傳遞給executor(executor 函數(shù)在Promise構(gòu)造函數(shù)返回所建promise實(shí)例對(duì)象前被調(diào)用)烛愧。resolve 和 reject 函數(shù)被調(diào)用時(shí)油宜,分別將promise的狀態(tài)改為fulfilled(完成)或rejected(失敗)怜姿。executor 內(nèi)部通常會(huì)執(zhí)行一些異步操作慎冤,一旦異步操作執(zhí)行完畢(可能成功/失敗),要么調(diào)用resolve函數(shù)來將promise狀態(tài)改成fulfilled沧卢,要么調(diào)用reject 函數(shù)將promise的狀態(tài)改為rejected蚁堤。如果在executor函數(shù)中拋出一個(gè)錯(cuò)誤,那么該promise 狀態(tài)為rejected搏恤。executor函數(shù)的返回值被忽略违寿。
ES5查漏補(bǔ)缺
reduce() / apply()