0

我在这里失去了它。我现在对这个循环是如何工作的感到非常困惑。

来自 w3 学校:

var person={fname:"John",lname:"Doe",age:25}; 

for (x in person)
{
document.write(person[x] + " ");
}

人是具有属性的对象吗?如何使用方括号访问这些属性?我以为那是为了数组?

为什么这也有效,不应该只是这样吗?:

var person=[]; 
person["fname"] = "John";
person["lname"] = "Doe";
person["age"] = "25";


for (x in person)
{
document.write(person[x] + " ");
}
4

5 回答 5

3

您可以通过两种方式访问​​对象的属性:

  • obj.key
  • obj['key']

第二种方法的优点是您还可以动态提供密钥,例如obj[x]在您的示例中。obj.x字面意思是x属性(即obj['x']),这不是您想要的。

数组只适用于括号,但括号不限于数组。数组在引擎盖下也是对象,但设计用于数字键。您仍然可以向它们添加带有非数字键的属性,但这不是它们的设计目的。

于 2011-07-21T09:35:41.793 回答
1

您可以使用 JavaScript 中的括号运算符访问 Object 字面量和数组。对于对象,括号运算符通过将括号中的值转换为字符串(如果它不是字符串)并检查它是否确实是属性(mdc)来访问对象的成员。

您的第二个示例建议使用 JavaScript(链接)中不鼓励使用的“关联数组” 。

回答您的问题:编写Map类似结构的标准方式(imo)——即持有键值对的对象——使用for-in循环进行迭代是对象文字;编写更传统数组的标准方法是Array Object.

var map = { "a": "string" , "b": 0 , "c": null } ;

    for(key in map) console.log("(!!) map # " + key + " : " + map[key] ) ;

var list = ["string",0,null] ;

    for(i = 0 ; i < list.length ; i++) console.log("(!!) list # " + i " : " + list[i] ) ;
于 2011-07-21T09:40:18.710 回答
0

JavaScript 对象属性可以通过 object[key] 和 object.key 访问(以及其他一些方式,很可能)。就像他们的工作方式一样。

你的第二个例子,一个数组是一个特殊的对象,但仍然是一个对象。

于 2011-07-21T09:30:55.517 回答
0

在 js 中,对象是关联数组,这意味着它们只不过是键值对的集合。
如果您对刹车感到困惑,请不要!可以通过“.”访问 Javascript 对象属性。或“[]”结构:

var a = {key : 'val'};
alert(a['key'] === a.key);

在大多数情况下,它们的工作方式相同。
这只是偏好和浏览器实现的问题(例如:firefox 使用括号更快,而 chrome 使用点更快)。
在某些情况下,点构造会失败:假设您有一个对象,该对象具有名为“some-key”的属性。
如果你想用点符号 : 来访问它object.some-key,你肯定会得到一个错误,因为代码被解释为 2 个值之间的差异 : object.some - key。在这种情况下,您应该使用方括号 : object['some-key']
还有其他情况,其中密钥包含特殊字符,例如., ,, ;, \, *...etc 已经在 javascript 中具有解释。

于 2011-07-21T09:32:11.343 回答
0

http://bonsaiden.github.com/JavaScript-Garden/#object.general

“可以通过两种方式访问​​对象的属性,通过点表示法或方括号表示法。”

于 2011-07-21T09:32:44.060 回答