通过javascript中具有多个“节点”的变量访问对象属性

时间:2013-10-02 11:59:39

标签: javascript

想象一下这个对象:

var obj = {
             one: {
                two:{
                    three: "whatever"
                }
             }
          }

如果我想访问“我喜欢”的任何内容:

console.log( obj.one.two.three ) --> "whatever"

我甚至可以使用像:

这样的变量
var one = "one"
console.log( obj[one].two.three ) --> "whatever"

但为什么这不起作用?

var onetwo = "one.two"
console.log( obj[onetwo].three ) --> undefined

1 个答案:

答案 0 :(得分:1)

  

但为什么这不起作用?

因为该语言不支持该表示法。它根本就不存在。规范将property access as with bracket notation定义为:

  

MemberExpression [Expression]

定义如何工作的算法在下面的行中定义,嵌套属性的语法根本不是核心语言语法的一部分。

有一些特定的解析器允许你这样做,你总是可以自己调用语言编译器(例如,JS允许你用eval执行此操作 - 尽管如此),但用例并不常见够了。


注意: 由于您在评论中提到您使用Angular,因此已使用$parse内置var res = $parse("one.two.three")(obj);内置a fiddle.