【问题标题】:What's the difference between .substr(0,1) or .charAt(0)?.substr(0,1) 或 .charAt(0) 有什么区别?
【发布时间】:2011-09-28 14:47:35
【问题描述】:

我们想知道thread 在您想要获取第一个字符时使用.substr(0,1) 和使用.charAt(0) 之间是否存在真正的区别(实际上,它可以适用于您wan 只有一个字符)。

是否每个都比另一个快?

【问题讨论】:

  • 您可以尝试分析它们...另外,答案可能取决于浏览器...
  • 你可以做一个benchark (jsperf.com)。
  • @Felix Kling:感谢您提供的链接,已添加书签!
  • 两者都返回“字符串”类型。 typeof 'something'.charAt(0) => "字符串"; typeof 'something'.substr(0,1) => "字符串"
  • @JMax:你也可以做一个"abcdefghijklmnopqrstuvwxyz"[0]

标签: javascript performance string


【解决方案1】:

测量是关键!

转到http://jsperf.com/substr-or-charat 自行对其进行基准测试。

substr(0,1) 在我的机器上每秒运行 21,100,301 次操作,charAt(0) 每秒运行 550,852,974 次。

我怀疑 charAt 在内部将字符串作为数组访问,而不是拆分字符串。

在 cmets 中发现,直接使用 string[0] 访问 char 比使用 charAt(0) 稍快。

【讨论】:

  • Max 的答案是针对 Java,而不是 JS...而且您的结果似乎是错误的!
  • 第一个数字高得可疑。你确定这是对的吗?虽然那个链接很棒。
  • 这显示了 Chrome 14 的速度有多快——charAt 的运行速度几乎是 Chrome 12 的 4 倍...
  • @Rich:我在 chrome 上添加了a[0] 测试here...,a[0] 几乎和a.charAt(0) 一样快。
  • 啊,我现在让 a[0] 比 a.charAt(0) 快,这是有道理的。
【解决方案2】:

除非您的整个脚本都基于进行快速字符串操作的需要,否则我根本不会担心性能方面的问题。我会使用charAt(),因为它是可读的,并且是该语言提供的最具体的工作工具。此外,substr() 并非严格标准,尽管任何新的 ECMAScript 实现都不太可能忽略它,但它可能会发生。 str.charAt(0) 的基于标准的替代方案是 str.substring(0, 1)str.slice(0, 1),对于 ECMAScript 5 实现,str[0]

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 2016-08-03
    • 2012-04-24
    • 2011-05-31
    • 1970-01-01
    • 2016-03-23
    • 2021-06-16
    相关资源
    最近更新 更多