2016-01-27 82 views
0

我有以下格式的JSON响应。使用' - '的Javascript对象属性无法正常工作

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

我采用了棱角分明的$http服务检索这一点,并试图访问next-person-id属性在JavaScript中像下面,

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

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

+0

您可以通过以下链接查看JavaScript变量名验证https://mothereff.in/js-variables#%E0%B2%A0% 5f%E0%B2%A0 –

回答

7

使用括号标记:

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

另一种可能是改变键使用下划线,这样_meta.next_person_id会工作。

1

你不能写变量使用 - 因为它也是一个负号。

为了解决这个问题,用方括号:

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

没错真的,因为在JavaScript你可以使用Latin lettersnumbers$_符号变量或属性。

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

这样

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

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

说明:

Global scope-装置minus。它试图从name减去person。所以,你会得到这样的错误:

ReferenceError: name is not defined 

JS您可以访问两种方式

1)点的国家

obj.property 

2)括号国家

到对象属性
obj['property'] 

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

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

+0

“,因为在JavaScript中可以对变量或属性使用拉丁字母,数字和$ _符号。” - 您可以在标识符中使用很多其他字符。 – Quentin

+0

“在全局范围内 - 表示减去。” - 范围无关紧要。这就是'-'的意思是在字符串之外。 – Quentin

+0

@Quentin随时编辑我的答案 –