带有“ - ”的Javascript Object属性无法正常工作

时间:2016-01-27 08:07:44

标签: javascript angularjs

我有以下格式的JSON响应。

 {
  "_meta" : {
               "next-person-id" : "1001",
               "totalPersons" : "1000"
            }
 }

我正在使用Angular的$http服务来检索此内容并尝试在javascript中访问next-person-id属性,如下所示,

  $http.get(url).then(
        function(response){
              console.log(response._meta.next-person-id);
        }
  );

但是响应中的next-person-id始终未定义。但我能够访问totalPersons属性。在javascript中使用' - '字符获取属性有什么问题吗?

3 个答案:

答案 0 :(得分:7)

使用括号表示法:

? [= com.bla.bla] file /var/log/my-log
? [= com.bla.bla] claim  

可能的替代方法是更改​​密钥以使用下划线,以便console.log(response._meta['next-person-id']); 起作用。

答案 1 :(得分:1)

你不能使用 - 因为它也是一个减号。

要解决此问题,请使用方括号表示法:

console.log(response._meta['next-person-id']);

答案 2 :(得分:-1)

是的,因为在JavaScript中,您可以对变量或属性使用Latin lettersnumbers$ _符号。

如果您想使用-,则应使用字符串引号将其转义。

像这样

var obj = {
   'next-person-id': 2
}

console.log(obj['next-person-id']); // 2

说明:

Global scope -表示minus。它会尝试从person中减去name。所以你会得到这样的错误:

ReferenceError: name is not defined

JS中,您可以通过2种方式访问​​对象属性

1)Dot nation

obj.property

2)方括号国家

obj['property']

这里你需要解析字符串,所以你知道在字符串中你可以有除字符串引号之外的任何符号(它将关闭字符串)

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation