JavaScript中“基本類型”之爭

來源:互聯網
上載者:User

前端面試中常被問到的問題之一就是“JavaScript的基本類型有幾種?”。

有的回答“數字、字串、布爾”,有的可能會再加上“Null、Undefined”。而有人可能認為“object”也是基本類型。到底是什麼樣呢?

 

所謂“基本類型(primitive types)”的概念ECMAScript(V3,V5)中壓根就沒有,它只是將類型分為6種。

ECMAScript只提到類型,用types表示,在V3,V5整個文檔搜關鍵字“primitive”也沒見“primitive type”,“primitive value”倒是有,如true/false/0-9等。這說明規範壓根就沒有所謂的“基本類型”、“原始類型”一說(primitive types)。如果非要說有那麼object明顯也是,即有6種基本類型。

 

一些書籍卻經常使用這個概念,如《JavaScript進階程式設計》第一版、第二版,第三版。

第一版提到有5種原始類型,即Undefined、Null、Boolean、Number、String

第二版和第三版又搞出了個simple data type,翻譯為單一資料型別(也稱為基礎資料型別 (Elementary Data Type)),稱對象為複雜資料類型。

 

另一本經典書《JavaScript權威指南(第6版)》第3章也提到了primitive types

先分為基本類型(primitive types)和物件類型,基本類型又分為數字,字串,布爾,及兩個特殊null,undefined。

 

5年前JavaScript方面的書籍還很少,這兩本書就是其中之二,影響也很大,可謂經典。因此受此影響的JSer不乏少數。我想書作者把語言類型分為基本類型(元類型)和物件類型(複雜類型)也是符合學習邏輯的,複雜類型由簡單類型組合而成。另外也是受到其它語言如Java的影響,它們也是把類型分為基本類型(8種)和物件類型。

但ECMAScript中沒有所謂的primitive types,就好比它沒有類(class)的概念一樣(具有其它語言能力的人仍然喜歡在JavaScript使用名詞“類”)。它裡面提到的就是類型,可以把它理解成基本類型,但也應該是6種。這裡的基本類型也不是Java中的基本類型,因為它包含了複雜資料類型-對象。

 

不是所有的書都認為JavaScript中基本類型只有5種(不包括對象),《JavaScript語言精髓與編程實踐》認為是6種,如下

它沒有將null歸為其中,卻增加了function類型。 它的依據是typeof的結果只有6種(僅含ES自身,不包括宿主對象),如下

var a = 1, b = '2', c = true, d, e = null, f = function(){}typeof a === 'number'; // truetypeof b === 'string';    // truetypeof c === 'boolean'; // truetypeof d === 'undefined'; // truetypeof e === 'object'; // truetypeof f === 'function'; // true

一共是6中類型,注意null的類型時object。有的書說null的實現是當初的一個錯誤,誰知道呢。

 

我們來看wiki中基礎資料型別 (Elementary Data Type)的定義

  • a basic type is a data type provided by a programming language as a basic building block. Most languages allow more complicated composite types to be recursively constructed starting from basic types.
  • a built-in type is a data type for which the programming language provides built-in support. In most programming languages, all basic data types are built-in. In addition, many languages also provide a set of composite data types. Opinions vary as to whether a built-in type that is not basic should be considered "primitive".

 

翻譯以下

  • 基本類型是這樣一種資料類型,它是由程式設計語言提供的最基本的構建塊,多數語言還允許眾多複雜的由基本類型組成的複合資料型別
  • 內建類型是由程式設計語言自身提供的類型,多數編程語中所有的基本類型都是內建的。此外,很多語言還提供一組複合資料型別。一個內建類型是不是該認為是“原始的”的類型這個一直存在爭議。

 

下次再有人問這個問題如何作答呢?

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.