这个属性检索代码有什么问题?

时间:2013-12-17 14:27:53

标签: javascript

var testobj = {
    whatever: "jeremy",
    alsotest: "wow"
};

for(name in testobj){
    document.writeln(name + ":" + testobj.name + "\n");
}

我从浏览器获得的是

whatever:undefined alsotest:undefined

有两个意想不到的事情:首先为什么值未定义?为什么换行字符根本不打印?

有人可以帮我解释一下吗?

2 个答案:

答案 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(或类似的东西),但这种方式是疯狂的。