【问题标题】:Javascript Object attribute with '-' doesn't work properly [duplicate]带有“-”的 Javascript 对象属性无法正常工作 [重复]
【发布时间】:2016-05-04 01:51:35
【问题描述】:

我有以下格式的 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中获取带有'-'字符的属性有什么问题吗?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

使用括号表示法:

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

一种可能的替代方法是将键更改为使用下划线,以便_meta.next_person_id 可以工作。

【讨论】:

    【解决方案2】:

    你不能用 - 来写变量,因为它也是一个减号。

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

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

    【讨论】:

      【解决方案3】:

      是的,因为在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

      【讨论】:

      • “因为在 JavaScript 中,您可以使用拉丁字母、数字和 $ _ 符号来表示变量或属性”——您可以在标识符中使用许多其他字符。
      • “在全局范围内 - 表示减号。” — 范围无关紧要。这就是 - 在字符串文字之外的含义。
      • @Quentin 随时编辑我的答案
      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多