想象一下这个对象:
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
答案 0 :(得分:1)
但为什么这不起作用?
因为该语言不支持该表示法。它根本就不存在。规范将property access as with bracket notation定义为:
MemberExpression [Expression]
定义如何工作的算法在下面的行中定义,嵌套属性的语法根本不是核心语言语法的一部分。
有一些特定的解析器允许你这样做,你总是可以自己调用语言编译器(例如,JS允许你用eval
执行此操作 - 尽管如此),但用例并不常见够了。
注意:
由于您在评论中提到您使用Angular,因此已使用$parse
内置var res = $parse("one.two.three")(obj);
内置a fiddle.