簡體   English   中英

為什么使用數組作為鍵來訪問對象中的元素?

[英]Why does accessing an element in an object using an array as a key work?

你怎么看的

var x = {a: 1};         //=> {a: 1}
var y = Object.keys(x); //=> ['a']
x[y]                    //=> 1

如果y = ['a']x[y]x[['a']] ,對嗎?

x[['a']];               //=> 1

x[[['a']]];             //=> 1

x[[[[[[[['a']]]]]]]];   //=> 1

有人可以解釋這里發生了什么嗎? 為什么這樣做?

屬性名稱必須是字符串。 如果嘗試使用數組作為屬性名稱,它將隱式調用其toString()方法。 這將生成一個字符串,其中包含一個用逗號分隔的值列表。

> var array = ['a', 'b', 'c'];
undefined
> array.toString();
'a,b,c'

如果只有一個值,則沒有逗號。

> var array = ['a'];
undefined
> array.toString();
'a'

@Quentin建議將屬性名稱自動轉換為字符串。 好的,我認為他在這里,但是給出兩個顯式的arr.toString()示例並沒有真正演示如何使用數組訪問對象的屬性。 我將此內容作為對他帖子的修改。 但是,他回滾了。

無論如何,這更明顯地顯示了imo的隱式行為。

var x = {'a,b,c': 1};

var y = ['a','b','c'];

x[y]; //=> 1

我認為它來自兩個事實:

  1. JS引擎類型
  2. 任何JS對象都可以像數組一樣訪問

所以你

["a"] 

當用作鍵時,將“投射”到字符串中,

a

甚至

[[[[["a"]]]]].toString() == a // true

所以你

x[y] 

結束於

x["a"]

暫無
暫無

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

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