javascript - w3school - website html title




JS對像中的鍵(字符串)的長度是否有限制? (2)

所以我們有一個案例,我們會有一些JSON,其中key是id(int),值是字符串。 但是我們注意到大多數時候,我們根據字符串查找id,所以我們決定將其反轉並將字符串作為鍵,值為id。 因為這樣而不是遍歷每個項目並比較值,我們可以做var id = storage[text]; 。 以下是我們所做的例子。

這是舊實現的示例:

var storage = {
  0 : null,
  1 : "Hello",
  2 : "world!",
  3 : "How are you?"
}

以下是新實現的示例:

var storage = {
  "null" : 0,
  "Hello" : 1,
  "world!" : 2,
  "How are you?" : 3
}

我知道現在字符串是鍵,並且可以為相同的字符串獲取相同的id。 但是從現在開始字符串可能非常巨大(機會很小,但每個字符串可能最大1KB), JS或Android webview是否存在長度限制對象鍵?

而且,這種實施有缺點嗎? 到目前為止我沒有發現任何問題,但你永遠都不知道。


不,字符串長度沒有限制(只要它適合內存),你的實現似乎也沒關係。 將這些“轉向”數組與例如布爾值進行交換是很常見的。 至於作為鍵的字符串:字符串是存儲在某個地址的不可變符號,而實際用作數組索引的是該地址(也就是指針也稱為引用),而不是字符串本身。


我對此進行了一些研究。

MDN對此問題保持沉默 ,規範也是如此( ES5ES6 )。 他們只聲明屬性訪問者必須是一個字符串,沒有任何資格 - 換句話說,就規範而言,沒有限制。 這並不奇怪。

瀏覽器如何處理它是另一回事。 我已經設置了一個測試並在許多瀏覽器中運行它。 Chrome 40(桌面),Chrome 40(Android 5.1),Firefox 36,Opera 27和IE9 +可以處理最多2 27個字符的屬性名稱。 Safari 8(OS X Yosemite)甚至可以處理2 30個字符的屬性名稱。

對於IE以外的所有瀏覽器,最大屬性長度與最大字符串長度相同。 IE9 +可以處理最大字符串長度~2 30個字符,但對象鍵的限制為2 27個字符,就像在其他瀏覽器中一樣。

該測試在iOS上的IE8和Safari中不起作用,可能是由於測試代碼導致的內存問題。

簡而言之,使用長屬性名稱是安全的,即使將其置於極端狀態也是如此。 只要字符串本身保持在瀏覽器可以處理的範圍內,您也可以將它們用作屬性名稱。







javascript-objects