簡體   English   中英

訪問JSON對象中的數組元素

[英]Accessing an array element inside JSON Object

無意中,在我的項目中,我使用了以下代碼,我很驚訝地看到它正在工作:

HTML

<span id="output"></span>

使用Javascript

var myObject = {
  'a': '----First---',
  'b': '----Second---',
  'c': '----Third----'
};

var myArray = ['a'];

// First Case
output.innerHTML = myObject[myArray];

var myArray2 = ['b'];

// Second Case
output.innerHTML += myObject[myArray2];

var myArray3 = ['a', 'b'];

// Third Case 
output.innerHTML += myObject[myArray3];

產量

----First-------Second---undefined

Jsbin Link: http ://jsbin.com/godilosifu/1/edit?html,js,output

我直接訪問Object中的數組引用,在所有情況下都應該是未定義的,但奇怪的是當數組大小為1時,它總是獲取第一個元素並將其用作對象鍵。

我只是想知道這個概念叫什么,為什么會這樣?

因為屬性名稱必須是字符串,所以使用toString()方法將其類型轉換為一個字符串。 你的第三個例子未定義的原因是['a', 'b'].toString()等於'a,b' ,它不是你對象中的屬性。

物業名稱

屬性名稱必須是字符串。 這意味着非字符串對象不能用作對象中的鍵。 任何非字符串對象(包括數字)都通過toString方法進行類型轉換為字符串。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors

值得注意的是,在ECMAScript 6中,有一個名為Map的新集合類型,它允許您將任何對象用作沒有類型強制的鍵。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

當您將數組作為Key傳遞給對象時,它會在其上調用toString()。 這是因為Javascript中的所有鍵都是字符串。

['a'].toString() is "a"
myObject['a'] is "----First----"

請參閱: Javascript對象中的鍵只能是字符串?

這是自動投射。 在Javascript中,只有字符串可以索引到對象的屬性中。 myObject不是數組,它是一個對象。 即使您使用括號訪問它的屬性,它也與數組對象上使用的括號不同。

由於只允許通過字符串命名對象屬性,編譯器會自動將您的數組轉換為字符串(實質上是調用它的本機toString()函數,對於數組,它使用逗號連接所有元素)。

因此,當您將數組傳遞給對象的屬性訪問器/索引時,它會執行以下操作:

myArray1 ==> "a";
myArray2 ==> "b";
myArray3 ==> "a" + "," + "b" ===> "a,b";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM