参考嵌套的JavaScript对象

3

我有这段代码:

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);

虽然下面找到了类似的例子,并且教科书明确表示它们应该起作用,但我仍然无法理解:

使用字符串键访问嵌套的JavaScript对象

非常感谢您提供任何帮助!

我目前正在构建一个对象并传递它,使用'for in'可以显示值,但是'typeof'测试或者我尝试的任何其他方式都不能工作,要么我会遇到错误(这会破坏程序,我认为),要么我得到'undefined'....

最后一件事,如果这个问题得到解决,将同名值作为其父级的键嵌套是否可以,例如data.data - 这导致可能进一步嵌套,如data.data.data...


2
object1没有"string"属性...你想要的是object['object1']['nameString']。 - dandavis
该死,你是对的。我以为这可能是一个相关的问题,但是我看不出我写的代码哪里出了问题!(顺便说一下,这不是例子,而是一个类似的结构,我也无法让它工作) - user1360809
1个回答

3
让我们分别看一下每个示例中的问题,然后再看一下正确的方法。
示例1:
object['object1']['string']['nameString']
1. 我们期望object['object1']返回对象string,对吗?所以让我们简化这个表达式,替换掉它的那一部分。这将使我们更容易理解。 2. 现在我们有了string['string']['nameString']。 3. 但是string没有名为'string'的成员,因此string['string']返回undefined。 4. 当您尝试将undefined视为对象时,就会出现错误!
示例2:
object.object1.string.nameString
1. 我们期望object.object1返回对象string,对吗?所以让我们简化这个表达式,替换掉它的那一部分。这将使我们更容易理解。 2. 现在我们有了string.string.nameString。 3. 但是string没有名为'string'的成员,因此string.string返回undefined。 4. 当您尝试将undefined视为对象时,就会出现错误!
您想要的表达式:
object.object1.nameString (或object['object1']['nameString'])
1. 我们期望object.object1返回对象string,对吗?所以让我们简化这个表达式,替换掉它的那一部分。这将使我们更容易理解。 2. 现在我们有了string.nameString,我们期望它返回"nameValue"。 3. 它确实如此!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接