我正在尝试通过对象内对象内对象的索引访问特定数组(对不起,这可能是错误的术语)。
var person = {
name: ["Tom", "Mike", "Sally"],
hair: {
style: ["bob", "weave", "mullet"],
length: ["long","short","medium"]
}
}
getDetail(length);
function getDetail(det) {
var answer = person.hair.det[1];
console.log("Hair " + det + " is " + answer) //outputs: "Hair length is long"
}
执行此操作时,出现错误“无法读取未定义的属性'1'”。告诉我它没有正确传递'det'变量。如果我将其取出并放入长度,它将起作用。
我想念什么?
谢谢!
最佳答案
当您说getDetail(length)
时,它正在寻找一个名为length
的变量,并将其传递给函数。由于不存在,该函数将获取undefined
。
但是,当您编写“ myObjectVariableName .etcetera
”时,它将专门查找名为“ etcetera”的索引-因此它甚至不会使用您的det
参数-而是在查找“ det”索引。
您可以改为编写以下任一方法。
myObjectVariableName["myIndexName"]
var myString = "myIndexName";
myObjectVariableName[myString]
两者将具有相同的结果。
因此,为了获得预期的结果,您要做的是将字符串“ length”传递到getDetail中,然后将
.det
替换为[det]
(darkajax似乎已经写了我想要的东西,但是我希望我的解释也有助于弄清为什么它不起作用)