【问题标题】:Why does '' (empty string) permeate all strings?为什么''(空字符串)渗透所有字符串?
【发布时间】:2015-10-14 18:27:17
【问题描述】:

我今天有点困惑,"string".indexOf(''); 总是返回0,但我希望-1(对于false);相反,"string".lastIndexOf(''); 总是返回 6

lastIndexOf 更容易理解,因为字符串长度为 6 个字母("string".length,零索引返回 5)但我在 ECMAscript 规范中看不到任何地方(5.16.0 ) 描述 为什么 '' 将被视为单词/字符边界

这里到底发生了什么?

【问题讨论】:

  • 是的,'' 被视为单词/字符边界。
  • indexOf() 返回找到的匹配项的第一次 次出现,并仅在根本找不到字符串时返回-1
  • '' 被视为......嗯......一个空字符串。另一个字符串中第一次出现的空字符串正好在它的开头。
  • “重复”是关于 Java 的。这个问题要求澄清规范,而不是出于模糊的原因。所以我投票决定重新开放并添加 [language-lawyer] 标签。

标签: javascript string standards language-lawyer ecma262


【解决方案1】:

规范说:

返回不小于start这样的最小可能整数k k+searchLen 不大于 len,并且对于所有 非负整数 j 小于 searchLen,字符位于 Sk+j位置与j位置的字符相同 searchStr;但如果没有这样的整数k,则返回 值 -1。

由于vacuous truth,该条件在位置 0 处得到满足:由于您正在搜索空字符串,因此您能想到的任何语句都将适用于每个字符,因为它没有字符。

更正式地说,对于任何声明P,如果S = ∅P(x) 成立∀ x ∈ S

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多