【问题标题】:is it valid javascript to index with square brackets right after declaring with square brackets?在用方括号声明后立即用方括号索引是否有效?
【发布时间】:2013-01-08 20:17:04
【问题描述】:

通常我会写

arr = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'];
position = 3;
answer = arr[position];

只是想知道... 编写以下内容是否有效?
它可以跨浏览器工作吗?

answer = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'][position];

【问题讨论】:

  • 这在大多数其他将数组作为一等值的语言中也可以(想到 Python)
  • @missingno 它在 5.5 之前的 PHP 中不起作用
  • @JanDvorak:拜托,PHP 在涉及到合理的语言特性时真的不算数吗?
  • @missingno 我同意;因为什么时候1?2:3?4:54,而不是2
  • @MichaelBerkowski 是的,我确实尝试过,但一直犹豫是否将其留在那里,以防它不“正确”!

标签: javascript arrays syntax


【解决方案1】:

是的,根据ECMAScript 5 specification

MemberExpression :
    PrimaryExpression
    FunctionExpression
    MemberExpression [ Expression ]
    MemberExpression . IdentifierName
    new MemberExpression Arguments

PrimaryExpression is defined as:

PrimaryExpression :
    this 
    Identifier
    Literal
    ArrayLiteral
    ObjectLiteral
    ( Expression )

所以构造 ArrayLiteral[Expression] 是有效的。


这并不一定意味着它适用于所有浏览器(尤其是 IE 有一些语法怪癖),但你应该假设它可以。

【讨论】:

  • 我将答案授予第一个发帖的人,但感谢您提供信息丰富的答案和参考。到目前为止,我已经测试了 iOS5 iPad、ie9、ie8 模拟器、ie7 模拟器,并且可以在这些模拟器上运行
【解决方案2】:

是的,会的。这个语法乍一看很奇怪,但它是完全有效的。您正在从一个没有分配给任何东西的数组中获取一个位置值。

【讨论】:

  • 奇怪?我一直在用它
  • @Bergi: 11 年前,当我开始编程时,这种 sintax 对我来说很奇怪:)
【解决方案3】:

有效。和做的差不多

 some_func_that_returns_an_array()[7]

【讨论】:

    【解决方案4】:

    是的,数组字面量可以是member operator 的语法上有效的左侧部分。它确实可以跨浏览器工作。

    我发现这个结构是冗长的switch 语句的一个非常易读的替代方案,并且也可以将它与对象文字一起使用。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2020-03-28
      • 1970-01-01
      • 2010-10-21
      • 2017-03-25
      相关资源
      最近更新 更多