3

访问 Js 对象属性:

和有什么区别:

1) Obj.src
     vs
2) Obj["src"]

我只知道 #1 不能与数字一起使用(例如,如果属性名称是“1”)

还有其他主要区别吗?

4

4 回答 4

4

真的没有区别。Old'ish 浏览器使用一种或另一种表示法显示出一些性能差异,但那些时代已经结束。

唯一重要的区别是括号表示法是您动态访问对象属性的唯一机会。

例如:

var access = 'src';

Obj[ access ];

你不能使用点符号来做到这一点。

于 2012-07-31T10:35:01.660 回答
1

在 javascript 中,每个对象都是一个关联数组

除了 JavaScript更好的神奇功能之一之外,我想不出更多要添加的内容。:)

于 2012-07-31T10:34:58.463 回答
1

Obj.src和之间没有区别Obj["src"]

但是当属性名称是一个变量时,你只能使用第二种方式来访问它。

var name = "src";

然后你需要使用Obj[name]Obj.name会尝试访问名称为 的属性name

于 2012-07-31T10:36:15.250 回答
1

可以用括号表示法访问的属性集是可以用点表示法访问的属性的超集。使用点访问的任何内容都必须是有效的 JavaScript 标识符

不能以数字开头的字母数字字符序列,还包括下划线 ("_") 和美元符号 ("$")。

属性仍然可以是不是标识符的字符串,但需要括号表示法才能访问:

object["I have whitespace"];
object["1startswithanumber"];
object["Punctuation!!??"];
object[""] = "empty string";
// not an exhaustive list

ES5 允许您使用保留字作为属性, x.class = "some string"但是ES3 不允许这样做,因此您可能应该使用方括号x["class"]来向后兼容。


括号表示法仍可用于访问有效的标识符属性,但点表示法被认为更简洁。当你有一个变量时,通常使用括号:

object[input.value];  //Retrieves the property named by the value of the input field

函数也可以用括号访问:

var fn = operation == "tag" ? "getElementsByTagName":"getElementsByClassName";
document[fn](str);
于 2012-07-31T11:13:46.480 回答