js 中的json物件和map

石頭匠人發表於2016-11-04

json 是一種輕量級的資料交換格式。對於 js 來說,json物件就是一個普通的物件。

它規定了一種格式規範,為各種程式語言進行資料的建立交換提供了一個準則。

es6開始加入了集合的概念,大多數程式簡單地用物件來儲存鍵值就夠了,對它們而言沒什麼必要換用Map和Set。

但是直接使用物件有一些問題:

作為查詢表使用的物件,不能既支援方法又保證避免衝突。
因而,要麼得用Object.create(null)而非直接寫 {} ,要麼得小心地避免把 Object.prototype.toString之類的內建方法名作為鍵來儲存資料。
物件的鍵名總是字串(當然, ES6 中也可以是Symbol)而不能是另一個物件
沒有效的獲知屬性個數的方法。
ES6 中又出現了新問題:純粹的物件不可遍歷,也就是它們不能配合 for -of 迴圈或… 操作符等語法。

ES6中的集合是為避免使用者資料與內建方法衝突而設計,所以它們不會把資料作為屬性暴露出來。也就是說,obj.key 或 obj[key]不能再用來訪問資料了,取而代之的是map.get(key)。

話說回來,json物件是由鍵值對組成的;而一個 Map物件由若干鍵值組成。 除了上面提到的一些集合的特性,還有其本身一些特殊的方法外,到底有沒有什麼容易理解的特性呢。map物件中的鍵值對是唯一的,這些特性可以在任何一本關於ES6的書中找到。

作為一個新人,我一直試圖證明json物件存進去的數字,再取出來的時候就變成了字串(起碼我們在進行資料請求時得到的json資料會出現這些問題),於是我在瀏覽器的控制檯輸入了下面的程式碼:

var json = {a:1};
console.log(typeof json.a);

結果得到的卻是:

number

算了,本來一個是資料格式,一個是資料型別,就不必糾結二者的區別了,我們只需要謹慎的使用json物件,並且積極地使用map就行了。


本文部分內容來自深入淺出ES6

相關文章