我试图通过它在对象内的对象内的索引来访问特定的数组(对不起,这可能是错误的术语)。
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'变量正确。如果我把它取出并改为长度,它就可以了。
我错过了什么?
谢谢!
答案 0 :(得分:4)
问题是在你的情况下你应该将一个字符串或一个变量传递给你的getDetail()
函数(length
本身就是none,因为它既没有先前定义也没有被引用),还有一个事实是,如果要使用变量来指示对象的属性/键,则应使用此类语法:object["property"]
。您可以将代码更改为:
getDetail('length');
function getDetail(det) {
var answer = person.hair[det][1];
console.log("Hair " + det + " is " + answer) //outputs: "Hair length is long"
}
答案 1 :(得分:0)
当你说getDetail(length)
时,它正在寻找一个名为length
的变量,并将其传递给函数。由于它不存在,函数得到undefined
。
但是,当你编写“myObjectVariableName .etcetera
”时,它会专门寻找一个名为“etcetera”的索引 - 所以它甚至不会使用你的det
参数 - 而是寻找“det”指数。
您可以编写以下任一项。
myObjectVariableName["myIndexName"]
var myString = "myIndexName";
myObjectVariableName[myString]
这两者都会有相同的结果。
因此,要获得预期的结果,您要做的是将字符串“length”传递给getDetail,然后将.det
替换为[det]
(darkajax似乎写了什么我想要,但我希望我的解释也有助于理解为什么它不起作用)