【问题标题】:dot-notation vs. bracket notation [duplicate]点表示法与括号表示法[重复]
【发布时间】:2016-02-08 13:59:42
【问题描述】:

我有这个 JavaScript 函数:

function test() {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState==4 && xhr.status==200) {
      var obj = JSON.parse(xhr.responseText);
      document.title = obj.page_title;
    }
  }
  xhr.open("GET", "title.php", true); xhr.send();
}

我的问题是: obj.page_titleobj["page_title"] 它们都对我很好,并返回相同的值。

【问题讨论】:

  • 它们只是做同样事情的不同符号。
  • obj.page_titleobj["page_title"] 相同。当属性名称在变量中或不是有效标识符时,后者很有用。
  • 只是一个友好的提示:这个问题与 JSON.parse 无关,即使这是您创建对象的方式。我会考虑改变标题。如果你改变你的标题,你会发现这个问题以前在这里被问过很多次。因此,您很可能会得到很多反对票。这不是私人的,在这篇文章中没有任何东西可以使整个社区受益,所以你可能应该删除这个问题,并且很高兴你已经得到了一个很好的答案:)

标签: javascript json ajax


【解决方案1】:

两者是一样的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

如果要使用变量,括号选项很有用:

var key = 'page_title';
obj[key];

或者如果您的属性名称中包含不寻常的字符,例如空格:

var obj = {
    'title of page': 'title'
}

obj.'title of page' // wrong
obj['title of page'] // right

【讨论】:

  • 我不知道你是怎么得到和我一样的答案的(但我先发了),你有两个上升,我得到一个下降...
  • 它们不一样,你没有提到变量(我本来也没有提到特殊字符)。
【解决方案2】:

唯一的区别在于您使用的是带有空格的键,还是该键存储在变量中。

这行不通

obj.i have a space = "foobar";

但这会

obg['i have a space'] = "foobar";

如果您的密钥存储在变量中,则此括号表示法比点表示法更好。

var o = {
  foo: bar,
  hello: world
}


for(var key in o){
  console.log(o[key]);  
}

【讨论】:

  • 这不是唯一的区别。另一个答案显示了另一个用例。
  • JavaScript 标识符中除了空格之外还有很多字符是无效的,因此不能与点表示法一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多