访问Js对象属性:
有什么区别:
1) Obj.src
vs
2) Obj["src"]
我只知道#1不能与数字一起使用(例如,如果属性名称为“1”)
还有其他重大差异吗?
答案 0 :(得分:4)
真的没什么区别。 Old'ish浏览器使用一种或另一种表示法显示出一些性能差异,但那些时间结束了。
唯一重要的区别是括号表示法是动态访问对象属性的唯一机会。
例如:
var access = 'src';
Obj[ access ];
你不能用点符号做到这一点。
答案 1 :(得分:1)
在javascript中,每个对象都是associative array 。
除了JavaScript的 better 神奇功能之外,我想不出更多。 :)
答案 2 :(得分:1)
Obj.src
和Obj["src"]
之间没有区别。
但是当属性名称是变量时,您只能使用第二种方式来访问它。
var name = "src";
然后您需要使用Obj[name]
,Obj.name
会尝试访问名为name
的媒体资源。
答案 3 :(得分:1)
可以使用括号表示法访问的属性集是可以使用点表示法访问的属性的超集。使用点访问的任何内容都必须是valid JavaScript identifier:
一系列字母数字字符,也包括下划线(“_”)和美元符号(“$”),它们不能以数字开头。
属性仍然可以是非标识符的字符串,但需要括号表示法来访问:
object["I have whitespace"];
object["1startswithanumber"];
object["Punctuation!!??"];
object[""] = "empty string";
// not an exhaustive list
ES5允许您使用reserved words as properties,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);