引用嵌套的JavaScript对象

时间:2013-07-25 23:06:21

标签: javascript object nested

我有这段代码:

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 个答案:

答案 0 :(得分:2)

让我们看一下每个例子的错误,然后看看它的工作方式是正确的。

示例1

object['object1']['string']['nameString']

  1. 我们希望object['object1']返回对象string,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。

  2. 现在我们有了string['string']['nameString']

  3. string没有名为'string'的成员,因此string['string']会返回undefined

  4. 当您尝试将undefined视为对象时,会出现错误!

  5. 示例2

    object.object1.string.nameString

    1. 我们希望object.object1返回对象string,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。

    2. 现在我们有了string.string.nameString

    3. string没有名为'string'的成员,因此string.string会返回undefined

    4. 当您尝试将undefined视为对象时,会出现错误!。

    5. 您想要什么

      object.object1.nameString(或object['object1']['nameString']

      1. 我们希望object.object1返回对象string,对吗?因此,让我们通过替换它的一部分来简化大表达式。这将使我们更容易理解。

      2. 现在我们有string.nameString,我们希望返回"nameValue"

      3. 确实如此!