JavaScript中“基本類(lèi)型”之爭(zhēng)小結(jié)
前端面試中常被問(wèn)到的問(wèn)題之一就是“JavaScript的基本類(lèi)型有幾種?”。
有的回答“數(shù)字、字符串、布爾”,有的可能會(huì)再加上“Null、Undefined”。而有人可能認(rèn)為“object”也是基本類(lèi)型。到底是什么樣呢?
所謂“基本類(lèi)型(primitive types)”的概念ECMAScript(V3,V5)中壓根就沒(méi)有,它只是將類(lèi)型分為6種。

ECMAScript只提到類(lèi)型,用types表示,在V3,V5整個(gè)文檔搜關(guān)鍵字“primitive”也沒(méi)見(jiàn)“primitive type”,“primitive value”倒是有,如true/false/0-9等。這說(shuō)明規(guī)范壓根就沒(méi)有所謂的“基本類(lèi)型”、“原始類(lèi)型”一說(shuō)(primitive types)。如果非要說(shuō)有那么object明顯也是,即有6種基本類(lèi)型。
一些書(shū)籍卻經(jīng)常使用這個(gè)概念,如《JavaScript高級(jí)程序設(shè)計(jì)》第一版、第二版,第三版。
第一版提到有5種原始類(lèi)型,即Undefined、Null、Boolean、Number、String

第二版和第三版又搞出了個(gè)simple data type,翻譯為簡(jiǎn)單數(shù)據(jù)類(lèi)型(也稱(chēng)為基本數(shù)據(jù)類(lèi)型),稱(chēng)對(duì)象為復(fù)雜數(shù)據(jù)類(lèi)型。

另一本經(jīng)典書(shū)《JavaScript權(quán)威指南(第6版)》第3章也提到了primitive types

先分為基本類(lèi)型(primitive types)和對(duì)象類(lèi)型,基本類(lèi)型又分為數(shù)字,字符串,布爾,及兩個(gè)特殊null,undefined。
5年前JavaScript方面的書(shū)籍還很少,這兩本書(shū)就是其中之二,影響也很大,可謂經(jīng)典。因此受此影響的JSer不乏少數(shù)。我想書(shū)作者把語(yǔ)言類(lèi)型分為基本類(lèi)型(元類(lèi)型)和對(duì)象類(lèi)型(復(fù)雜類(lèi)型)也是符合學(xué)習(xí)邏輯的,復(fù)雜類(lèi)型由簡(jiǎn)單類(lèi)型組合而成。另外也是受到其它語(yǔ)言如Java的影響,它們也是把類(lèi)型分為基本類(lèi)型(8種)和對(duì)象類(lèi)型。
但ECMAScript中沒(méi)有所謂的primitive types,就好比它沒(méi)有類(lèi)(class)的概念一樣(具有其它語(yǔ)言能力的人仍然喜歡在JavaScript使用名詞“類(lèi)”)。它里面提到的就是類(lèi)型,可以把它理解成基本類(lèi)型,但也應(yīng)該是6種。這里的基本類(lèi)型也不是Java中的基本類(lèi)型,因?yàn)樗藦?fù)雜數(shù)據(jù)類(lèi)型-對(duì)象。
不是所有的書(shū)都認(rèn)為JavaScript中基本類(lèi)型只有5種(不包括對(duì)象),《JavaScript語(yǔ)言精髓與編程實(shí)踐》認(rèn)為是6種,如下

它沒(méi)有將null歸為其中,卻增加了function類(lèi)型。 噢,千奇百怪的答案都有,下次再有人問(wèn)這個(gè)問(wèn)題如何作答呢?
- Ext對(duì)基本類(lèi)型的擴(kuò)展 ext,extjs,format
- javascript面向?qū)ο蟀b類(lèi)Class封裝類(lèi)庫(kù)剖析
- 淺析JavaScript基本類(lèi)型與引用類(lèi)型
- javascript基本類(lèi)型詳解
- JavaScript數(shù)據(jù)類(lèi)型之基本類(lèi)型和引用類(lèi)型的值
- Javascript中的包裝類(lèi)型介紹
- javascript基本包裝類(lèi)型介紹
- 淺談javascript中基本包裝類(lèi)型
- JavaScript類(lèi)型系統(tǒng)之基本數(shù)據(jù)類(lèi)型與包裝類(lèi)型
相關(guān)文章
JS實(shí)現(xiàn)合并json對(duì)象的方法
這篇文章主要介紹了JS實(shí)現(xiàn)合并json對(duì)象的方法,涉及javascript遞歸調(diào)用與json格式數(shù)據(jù)遍歷的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
javascript簡(jiǎn)單寫(xiě)的判斷電話號(hào)碼實(shí)例
這篇文章主要介紹了javascript簡(jiǎn)單寫(xiě)的判斷電話號(hào)碼實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
微信小程序?qū)崿F(xiàn)可長(zhǎng)按移動(dòng)控件
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)可長(zhǎng)按移動(dòng)控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
學(xué)習(xí)JavaScript設(shè)計(jì)模式(鏈?zhǔn)秸{(diào)用)
這篇文章主要帶領(lǐng)大家學(xué)習(xí)JavaScript設(shè)計(jì)模式,其中重點(diǎn)介紹鏈?zhǔn)秸{(diào)用,感興趣的小伙伴們可以參考一下2015-11-11
js判斷輸入框不能為空格或null值的實(shí)現(xiàn)方法
下面小編就為大家分享一篇js判斷輸入框不能為空格或null值的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
JS前端認(rèn)證授權(quán)技巧歸納總結(jié)
這篇文章主要為大家介紹了JS前端認(rèn)證授權(quán)技巧歸納總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
一個(gè)簡(jiǎn)單的JS時(shí)間控件示例代碼(JS時(shí)分秒時(shí)間控件)
這篇文章主要介紹了一個(gè)簡(jiǎn)單的JS時(shí)間控件示例代碼(JS時(shí)分秒時(shí)間控件)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11

