我有以下代码:

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 ...

最佳答案

让我们看一下每个示例的问题所在,然后看一下正确的工作方式。

示例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"
  • 做到了!
  • 10-05 20:35