我有这段代码:
var string = {
nameString : "nameValue",
nameString2 : "nameValue2",
nameString3 : "nameValue3",
datathing : 0,
};
var data = {
data : 1,
dataNum2 : 2,
dataNum3 : 3,
dataNum4 : 4,
};
var thing = {
datathing1 : 10,
datathing2 : 20,
datathing3 : 30,
datathing4 : 40,
};
var object = {
object1 : string,
data1 : data,
thing1 : thing,
};
为什么这两种方法都不能访问数据:
alert("testReference= " + object['object1']['string']['nameString']);
alert("testReference= " + object.object1.string.nameString);
我无法理解,即使下面发现类似的例子,教科书明确指出它们应该有效:
Accessing nested JavaScript objects with string key
提前感谢任何输入!
我正在构建一个对象并传递它,'for in'会显示值但是'typeof'测试或我尝试访问的任何其他方式都不起作用,要么我会遇到错误(哪个打破程序,我想)或者我得到'未定义'....
如果这个问题得到解决,最后一件事就是可以嵌套一个与其父级相同名称的键,例如data.data - 这会导致进一步嵌套的可能性,例如data.data.data。 ..
答案 0 :(得分:2)
让我们看一下每个例子的错误,然后看看它的工作方式是正确的。
示例1
object['object1']['string']['nameString']
我们希望object['object1']
返回对象string
,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。
现在我们有了string['string']['nameString']
。
但string
没有名为'string'的成员,因此string['string']
会返回undefined
。
当您尝试将undefined
视为对象时,会出现错误!
示例2
object.object1.string.nameString
我们希望object.object1
返回对象string
,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。
现在我们有了string.string.nameString
。
但string
没有名为'string'的成员,因此string.string
会返回undefined
。
当您尝试将undefined
视为对象时,会出现错误!。
您想要什么
object.object1.nameString
(或object['object1']['nameString']
)
我们希望object.object1
返回对象string
,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。
现在我们有string.nameString
,我们希望返回"nameValue"
。
确实如此!