[英]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中,只有字符串可以索引到對象的屬性中。 myObject
不是數組,它是一個對象。 即使您使用括號訪問它的屬性,它也與數組對象上使用的括號不同。
由於只允許通過字符串命名對象屬性,編譯器會自動將您的數組轉換為字符串(實質上是調用它的本機toString()
函數,對於數組,它使用逗號連接所有元素)。
因此,當您將數組傳遞給對象的屬性訪問器/索引時,它會執行以下操作:
myArray1 ==> "a";
myArray2 ==> "b";
myArray3 ==> "a" + "," + "b" ===> "a,b";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.