最新的 ECMAScript 標(biāo)準(zhǔn)定義了 8 種數(shù)據(jù)類型:
數(shù)據(jù)類型分為引用類型和原始類型,原始類型存儲(chǔ)在椏蕹ⅲ空間哥攘,引用類型存儲(chǔ)在堆空間。
- 7種原始類型:
Number Boolean String BigInt Symbol Undefined Null
- 1種引用類型:
Object
Class材鹦、Function逝淹、Array、Map侠姑、Set创橄、Date、RegExp莽红、Promise妥畏、FormData
等等都屬于特殊的 Object
,即引用類型安吁。NaN
屬于 Number
類型醉蚁。
新增數(shù)據(jù)類型:
-
Symbol
: 表示唯一值。 -
BigInt
: JavaScript 中的一個(gè)新的數(shù)字類型鬼店,可以用任意精度表示整數(shù)网棍。使用 BigInt,即使超出 Number 的安全整數(shù)范圍限制妇智,也可以安全地存儲(chǔ)和操作大整數(shù)滥玷。
新增數(shù)據(jù)結(jié)構(gòu):
-
Map
:彌補(bǔ)對(duì)象的鍵只能為字符串或Symbol的問題,Map的鍵值可以為任意數(shù)據(jù)類型巍棱, 有長度惑畴,可遍歷。 -
Set
:可以理解為一個(gè)值不能重復(fù)的數(shù)組航徙。 -
Promise
: 處理異步回調(diào)任務(wù)如贷,鏈?zhǔn)綄懛ǎ苊饣卣{(diào)地獄。有效分離執(zhí)行代碼和處理結(jié)果杠袱。
注:兩個(gè)空對(duì)象在內(nèi)存中的地址是不一樣的尚猿,所以Map
和Set
都會(huì)認(rèn)為不相等,但是兩個(gè)NaN
嚴(yán)格意義上本不相等楣富, 但這倆勉強(qiáng)認(rèn)為它們是相等的凿掂。
ES6 后 新的語法標(biāo)準(zhǔn):
let
: 聲明一個(gè)變量,相比較于var菩彬,不存在變量提升缠劝,且作用域?yàn)閴K級(jí)作用域潮梯。const
:聲明一個(gè)常量骗灶,聲明時(shí)必須初始化,且初始化后不能進(jìn)行重新賦值秉馏,我們一般定義常量名稱都用大寫英文字母來命名耙旦。class
:構(gòu)造函數(shù)的語法糖。聲明一個(gè)類萝究,即構(gòu)造函數(shù)的語法糖免都,完整的一個(gè)類,包括繼承帆竹,有extend
绕娘、constructor()
、super()
栽连、方法屬性 (static
和dynamic
)险领, 目前node里還不支持類里面定義靜態(tài)屬性或方法。模塊化: 分為導(dǎo)出
export
和引入import
秒紧,在node中為modules.exports()
和require()
函數(shù)绢陌。箭頭函數(shù): 簡化函數(shù)語法格式,并讓this始終指向?yàn)楹瘮?shù)的最初所有者熔恢,例如一個(gè)最簡單的帶參函數(shù)
foo => foo
脐湾。擴(kuò)展運(yùn)算符(
...
): 能夠展開對(duì)象或者數(shù)組。好像還能收回去叙淌。解構(gòu)賦值(
{varible} = {...}
): 將一個(gè)對(duì)象內(nèi)對(duì)應(yīng)鍵的值賦到對(duì)應(yīng){}里的變量里去秤掌。對(duì)象簡化(
{a, b, c}
):在一個(gè)對(duì)象里,如果變量名和鍵名相同鹰霍,則可以省略鍵名不寫闻鉴。模板字符串(
``
):引號(hào)中的內(nèi)容都被視為字符串,如需使用變量或者表達(dá)式可以使用`${...TODO...}`
衅谷,然后大括號(hào)包裹內(nèi)容椒拗。Generator
: 生成器函數(shù),表示為 "function* foo () { TODO }
" ,調(diào)用后并不會(huì)執(zhí)行里面的代碼蚀苛,而是后返回一個(gè)對(duì)象在验,yield
用于暫停函數(shù)執(zhí)行,調(diào)用.next()
恢復(fù)執(zhí)行狀態(tài)堵未。Async/Await
:generator函數(shù)的語法糖腋舌。await必須寫在async函數(shù)中,在函數(shù)前加一個(gè)async
即表示聲明一個(gè)異步函數(shù)渗蟹,返回值為Promise
對(duì)象块饺,await
表示等待一個(gè) async 函數(shù)完成后的操作。