【问题标题】:Using Array.at(index) instead of Array[index] in JavaScript在 JavaScript 中使用 Array.at(index) 而不是 Array[index]
【发布时间】:2022-01-24 03:31:27
【问题描述】:

我对@9​​87654321@ 引入的Array.at() 方法有疑问。它似乎比方括号注释arr[i] 更有用,因为有一个选项可以指定从数组末尾开始的索引,例如:arr.at(-1),它将返回arr 数组的最后一个成员。此外,它似乎更适合方法链接。切换到它有什么缺点吗?

【问题讨论】:

  • 我很好奇它如何“更适合方法链接”,我看不出 foo[n].someFn()foo.at(n).someFn() 之间的有意义的区别(除了额外的字符)。真正唯一的胜利是at(-1),AFAICT 也可以折叠成方括号语义。
  • proposal-relative-indexing-method repo readme 可能的问题包含一个项目 - 也可能由于未知的原因与网络不兼容。如果您想更深入地研究这个问题,可以通过链接获得更多信息。
  • 不是最有用的方法。我看到的唯一优势是您的代码会更短一些,并且可能更简洁一些。所以不用arr[length-2],你只需要写arr.at(-2)

标签: javascript arrays


【解决方案1】:

它的几个缺点是:

  • 这是一种非常新的方法。如果您使用旧版浏览器将无法理解您的代码,除非您包含 polyfill - 所以make sure you include one.
  • 在完全不同的轨道上,由于它是一种新方法,如果大量开发人员没有听说过它,我不会感到惊讶 - 使用 .at 可能会使他们中的一些人感到困惑(并导致他们查一下)。这并不是说您不应该使用它,而是要牢记这一点。

【讨论】:

  • 第二点其实是正面的。
  • 这可能对有问题的开发人员有好处,他们不是 OP 并且正在阅读他们的代码,如果他们足够聪明可以查找内容,但它可能对于代码库(至少在接下来的几个月,YMMV)来说,这不是一件好事,因为对于那些还没有听说过.at 的人来说,它可以说是有点模糊了意义——以及问题听起来像是从代码库的角度来看。例如,在 2015 年,很多人对箭头函数感到困惑。
  • 例如,考虑到每个人都能理解的非常简单的语法和更长、更复杂的语法(50% 的读者可能必须先查看才能理解)之间的选择,我更喜欢简单的语法如果更复杂的版本没有为这种情况提供任何额外的有用功能,则为版本。
  • Lots of people were confused about arrow functions in 2015, for example。许多 SO 问题的证据是,很多人在 2021 年仍然对箭头函数感到困惑(而且毫无疑问在 2022 年仍然如此)!
  • iOS 上的 Internet Explorer、Opera Android 和 Safari 不支持。
【解决方案2】:

代码可以重新定义这个功能的另一个缺点。这可能是一个安全问题

Array.prototype.at = () => console.log("?"); 

【讨论】:

    【解决方案3】:

    Array.at() 方法目前正在试验中,它可能会随着世界各地的开发人员测试和制造漏洞而改变,当然。

    不过,您可以使用 polyfill,事情变得容易,因为未来对实验的任何更改都不会影响您的代码,也不会分解。

    此外,该方法可能同时与 () 和 [] 一起使用,这是一件非常令人困惑的事情。在 mozilla 官方文档中提到:这并不是说使用方括号符号有什么问题。

    所以,现在不推荐使用array.at。

    【讨论】:

    【解决方案4】:

    我认为只有改进。类似于 python 代码,JS 现在可以查看索引为 -1 的数组来指示最后一个元素。

    a = [1,2,3]
    a[a.length-1] # 3
    

    a.at(-1) #3
    

    【讨论】:

      【解决方案5】:

      不,使用Array.at() 函数没有缺点,因为MDN 等于两个函数:

      这并不是说使用正方形有什么问题 括号符号。

      而不是提到Array.at() 的任何缺点,MDN 表示还可以使用arr[],但实际上使用Array.at() 更好。

      【讨论】:

        猜你喜欢
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-06
        相关资源
        最近更新 更多