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' 测试或我尝试访问的任何其他方式都不起作用,或者我会遇到错误(这会破坏程序,我想)或者我得到'未定义'....

如果这个问题得到解决,最后一件事是可以嵌套一个与其父级具有相同名称值的键,例如 data.data - 这导致进一步嵌套的可能性,例如 data.data.data ...

4

1 回答 1

3

让我们看看每个示例有什么问题,然后看看正确的方式。

示例 1

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

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

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

  3. string没有名为“字符串”的成员,因此string['string']返回undefined

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

示例 2

object.object1.string.nameString

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

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

  3. string没有名为“字符串”的成员,因此string.string返回undefined

  4. 当您尝试将undefined其视为对象时,您会收到错误!

你想要什么

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

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

  2. 所以现在我们拥有了string.nameString,并且我们希望它能够回归"nameValue"

  3. 确实如此!

于 2013-07-25T23:17:48.460 回答