編程語言都具備內建的數據結構,但各類編程語言的數據結構常有不一樣之處。本文試圖列出 JavaScript 語言中內建的數據結構及其屬性,它們能夠用來構建其餘的數據結構;同時儘量的描述與其餘語言的不一樣之處。編程
JavaScript 是一種弱類型或者說動態語言。這意味着你不用提早聲明變量的類型,在程序運行過程當中,類型會被自動肯定。這也意味着你可使用同一個變量保存不一樣類型的數據:數組
var foo = 42; // foo is a Number now foo = "bar"; // foo is a String now foo = true; // foo is a Boolean now
注:TypeScript編譯語言針對此問題作了改進;數據結構
最新的 ECMAScript 標準定義了 7 種數據類型:編程語言
6 種原始類型:函數
除 Object 之外的全部類型都是不可變的(值自己沒法被改變)。例如,與 C 語言不一樣JavaScript中字符串是不可變的(譯註:如,JavaScript中對字符串的操做必定返回了一個新字符串,原始字符串並無被改變)。 咱們稱這些類型的值爲「原始值」。
布爾類型(boolean)工具
布爾表示一個邏輯實體,能夠有兩個值:true 和 false。spa
Null類型prototype
Null 類型只有一個值: null。值 null 特指對象的值未設置。值 null 是一個字面量,它不像undefined 是全局對象的一個屬性。null 是表示缺乏的標識,指示變量未指向任何對象。把 null 做爲還沒有建立的對象,也許更好理解。在 APIs 中,null 常在返回類型是對象,但沒關聯值的地方使用。3d
Undefined類型調試
一個沒有被賦值的變量會有個默認值 undefined,undefined是全局對象的一個屬性。也就是說,它是全局做用域的一個變量。
數字類型
根據 ECMAScript 標準,JavaScript 中只有一種數字類型:基於 IEEE 754 標準的雙精度 64 位二進制格式的值(-(263 -1) 到 263 -1)。它並無爲整數給出一種特定的類型。除了可以表示浮點數外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數值,Not-a-Number)。
字符串類型
JavaScript的字符串類型用於表示文本數據。它是一組16位的無符號整數值的「元素」。在字符串中的每一個元素佔據了字符串的位置。第一個元素的索引爲0,下一個是索引1,依此類推。字符串的長度是它的元素的數量。
JavaScript 字符串是不可更改的。這意味着字符串一旦被建立,就不能被修改。可是,能夠基於對原始字符串的操做來建立新的字符串。例如:
獲取一個字符串的子串可經過選擇個別字母或者使用 String.substr().
兩個字符串的鏈接使用鏈接操做符 (+) 或者 String.concat().
可使用字符串來表達複雜的數據。如下是一些很好的性質:
按照慣例, 字符串通常能夠用來表達任何數據結構。這不是一個好主意。例如,使用一個分隔符,一個能夠模仿一個列表(一個JavaScript的數組可能更適合一些) 。不幸的是,當一個分隔符在用於列表中的元素時,打亂了這個列表。 一個轉義字符等。全部這些慣例都變成了一個不存在的維護負擔而沒有正確的工具使用。
表達文本數據和符號數據時候推薦使用字符串。當表達複雜的數據時,使用字符串解析和適當的縮寫。
符號類型
符號(Symbols)是ECMAScript 第6版新定義的。符號類型是惟一的而且是不可修改的, 而且也能夠用來做爲Object的key的值(以下). 在某些語言當中也有相似的原子類型(Atoms). 你也能夠認爲爲它們是C裏面的枚舉類型.
Symbol()函數會返回symbol類型的值,該類型具備靜態屬性和靜態方法。它的靜態屬性會暴露幾個內建的成員對象;它的靜態方法會暴露全局的symbol註冊,且相似於內建對象類,但做爲構造函數來講它並不完整,由於它不支持語法:"new Symbol()"。每一個從Symbol()返回的symbol值都是惟一的。
const symbol1 = Symbol(); const symbol2 = Symbol(42); const symbol3 = Symbol('foo'); console.log(typeof symbol1); // expected output: "symbol" console.log(symbol3.toString()); // expected output: "Symbol(foo)" console.log(Symbol('foo') === Symbol('foo')); // expected output: false
在計算機科學中, 對象是指內存中的能夠被 標識符引用的一塊區域.
屬性
在 Javascript 裏,對象能夠被看做是一組屬性的集合。用對象字面量語法來定義一個對象時,會自動初始化一組屬性。(也就是說,你定義一個var a = "Hello",那麼a自己就會有a.substring這個方法,以及a.length這個屬性,以及其它;若是你定義了一個對象,var a = {},那麼a就會自動有a.hasOwnProperty及a.constructor等屬性和方法。)然後,這些屬性還能夠被增減。屬性的值能夠是任意類型,包括具備複雜數據結構的對象。屬性使用鍵來標識,它的鍵值能夠是一個字符串或者符號值(Symbol)。
ECMAScript定義的對象中有兩種屬性:數據屬性和訪問器屬性。
數據屬性是鍵值對,而且每一個數據屬性擁有下列特性:
"標準的" 對象, 和函數節
一個 Javascript 對象就是鍵和值之間的映射。鍵是一個字符串(或者 Symbol) ,值能夠是任意類型的值。 這使得對象很是符合哈希表。
函數是一個附帶可被調用功能的常規對象。
日期
當你想要顯示日期時,毋庸置疑,使用內建的 Date 對象。
有序集: 數組和類型數組
數組是一種使用整數做爲鍵(integer-key-ed)屬性和長度(length)屬性之間關聯的常規對象。此外,數組對象還繼承了 Array.prototype 的一些操做數組的便捷方法。例如, indexOf (搜索數組中的一個值) or push (向數組中添加一個元素),等等。 這使得數組是表示列表或集合的最優選擇。
類型數組(Typed Arrays)是ECMAScript Edition 6中新定義的 JavaScript 內建對象,提供了一個基本的二進制數據緩衝區的類數組視圖。