此属性检索代码有什么问题

What's wrong with this property retrieval code?

本文关键字:什么 问题 代码 属性 检索      更新时间:2023-09-26
var testobj = {
    whatever: "jeremy",
    alsotest: "wow"
};
for(name in testobj){
    document.writeln(name + ":" + testobj.name + "'n");
}

我从浏览器中得到的是

whatever:undefined alsotest:undefined

有两件意想不到的事情:第一,为什么值未定义?第二,为什么根本不打印换行符?

谁能为我解释一下?

在您

的情况下,您正在尝试从testobj中获取名称为"name"的不存在的属性。

您应该改用方括号表示法:testobj[name]

使用.访问属性时,*必须提供与属性名称匹配的标识符。通过使用testobj.name,您将访问名为 name(不存在(的属性。

如果要使用包含与属性名称匹配的字符串的变量,则必须使用方括号表示法。

testobj[name]

可以使用方括号表示法中的任何字符串。

testobj["name"] === testobj.name;
function foo() {
    return "nam";
}
testobj[foo() + "e"] === testobj.name;

*"必须"在技术上是不正确的。可以使用eval(或等效的东西(,但这种方式是疯狂的。