我正在尝试通过对象内对象内对象的索引访问特定数组(对不起,这可能是错误的术语)。

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似乎已经写了我想要的东西,但是我希望我的解释也有助于弄清为什么它不起作用)

10-08 04:27