var testobj = {
whatever: "jeremy",
alsotest: "wow"
};
for(name in testobj){
document.writeln(name + ":" + testobj.name + "\n");
}
我从浏览器获得的是
whatever:undefined alsotest:undefined
有两个意想不到的事情:首先为什么值未定义?为什么换行字符根本不打印?
有人可以帮我解释一下吗?
答案 0 :(得分:3)
在您的情况下,您试图从"name"
中获取名称为testobj
的不存在的媒体资源。
您应该使用方括号表示法:testobj[name]
。
答案 1 :(得分:2)
使用.
访问媒体资源时,您必须*
提供与媒体资源名称相匹配的标识符。使用testobj.name
您正在访问名为name
的属性(不存在)。
如果要使用包含与属性名称匹配的字符串的变量,则必须使用方括号表示法。
testobj[name]
您可以使用方括号表示法中的任何字符串。
testobj["name"] === testobj.name;
function foo() {
return "nam";
}
testobj[foo() + "e"] === testobj.name;
*
“必须”不是技术上是真的。可以使用eval
(或类似的东西),但这种方式是疯狂的。