我目前正在研究JavaScript对象和数组的本质。我理解在JavaScript(作为面向对象的语言)中,所有东西都来自对象{}
。
我会一步一步地进行调查,以帮助理解我的问题。 在对对象或数组进行每次赋值之后,其下面的注释说明了赋值后该变量的状态。
我已经在Chrome控制台中对所有内容进行了测试。
// These will be used throughout the example.
var obj = {};
var arr = [];
好的,我可以用键/值对分配对象。
obj["a"] = "Hello World";
obj["b"] = "Goodbye World";
// {a: "Hello World", b: "Goodbye World"}
在这方面,我也可以传递数字作为关键(虽然我不确定这是不错的做法)。
obj[1] = "Another World";
// {a: "Hello World", b: "Goodbye World", 1: "Another World"}
在同样的方面,如果我想从对象中取回一个值,我可以使用[]运算符。
obj["a"];
// "Hello World"
obj[1];
// "Another World"
现在让我们看一下数组对象。我仍然可以使用[]运算符,但这似乎有一个相当奇怪的实现!
arr[0] = "John";
arr[1] = "Pam";
// ["John", "Pam"]
和对象一样,我可以使用[]运算符来获取值。
arr[0];
//"John"
但这似乎有点奇怪...鉴于我的阵列的当前状态,我也可以做以下。
arr["0"] = "Mark";
arr["1"] = "Helen";
// ["Mark", "Helen"]
所以看来,如果我将一个数字作为字符串传入,JavaScript会将它转换为我的数组索引......但是当我传入一个非数字键时会发生什么?
arr["foo"] = "Samantha";
arr["bar"] = "Matthew";
// ["Mark", "Helen"]
因此,当我向数组添加一个键/值对时,它对数组本身没有影响,但我仍然可以从该键中获取值。
arr["foo"]
// "Samantha"
所以我的问题是:为什么,数组如何确定如何存储数据,作为键值对,还是作为数组本身的一部分?
我的直觉是因为数组在技术上是对象的衍生物,它继承了对象将值存储为键/值对的能力,但也允许通过索引存储值(数组的性质)。 / p>
如果有人对此有任何见解,我会很高兴听到它!
答案 0 :(得分:0)
实际上,正好相反。
Javascript对象中的键始终是字符串。
例如:
var obj = {};
obj[42] = "Hi!";
obj["42"]; // "Hi!"
数组的唯一区别是数组具有基于已设置的最高数字索引的特殊length
属性。