1

想象一下这个对象:

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
4

1 回答 1

1

但是为什么这不起作用?

因为该语言不支持该符号。它根本不存在。该规范将属性访问定义为使用括号表示法

成员表达式 [ 表达式 ]

定义其工作方式的算法在以下几行中定义,嵌套属性的语法根本不是核心语言语法的一部分。

有特定的解析器可以让你这样做,你总是可以自己调用语言编译器(例如,JS 允许你这样做eval- 不要这样做),但用例不够普遍。


注意:由于您在评论中提到您使用 Angular,它已经内置了使用$parsevar res = $parse("one.two.three")(obj);Here's a fiddle。

于 2013-10-02T12:02:29.897 回答