访问JSON对象中的数组元素

sac*_*024 3 javascript arrays json object

无意中,在我的项目中,我使用了以下代码,我很惊讶地看到它正在工作:

HTML

<span id="output"></span>
Run Code Online (Sandbox Code Playgroud)

使用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];
Run Code Online (Sandbox Code Playgroud)

产量

----First-------Second---undefined
Run Code Online (Sandbox Code Playgroud)

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

我直接访问Object中的数组引用,在所有情况下都应该是未定义的,但奇怪的是当数组大小为1时,它总是获取第一个元素并将其用作对象键.

我只是想知道这个概念叫什么,为什么会这样?

Dre*_*nmi 7

因为属性名称必须是字符串,所以使用该toString()方法将其类型转换为一个字符串.第三个示例未定义的原因是['a', 'b'].toString()equals '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