空字符串的indexOf为零。为什么?

时间:2018-10-03 09:44:07

标签: javascript indexof

为什么在javascript中会发生这种情况?

this

在其他虚假值中,该值为-1:

'abc'.indexOf('a');        //0
'abc'.indexOf('');         //0

我也看到了以下问题:
Q1无法深入了解答案。
Q2是Java语言而不是javascript语言。

1 个答案:

答案 0 :(得分:3)

基本上,答案是:因为这就是函数is specified to behave的方式。从某种角度讲,这是有道理的。

与搜索空字符串时返回0相关的主要位是:

  

返回不小于 start 的最小可能整数 k ,以使 k + searchLen 不大于 len ,并且对于所有小于 searchLen 的非负整数 j ,位于 S 中索引为 k + j 的代码单元与 searchStr 中索引为 j 的代码单元相同;但是如果没有这样的整数 k ,则返回值-1。

由于搜索字符串的长度为0,因此 k = 0 满足“ and”的两个部分:k + searchLen不大于字符串的长度,并且对于所有小于搜索长度(为零)的非负整数,代码点均匹配。

或者粗略地说,在代码中:

function indexOf(searchString, position = 0) {
    let s = String(this);
    let searchStr = String(searchString);
    let len = s.length;
    let start = Math.min(Math.max(position, 0), len);
    let searchLen = searchStr.length;
    let k = 0;
    while (k + searchLen <= len) {
        if (s.substring(k, k + searchLen) === searchStr) {
            break;
        }
        ++k;
    }
    const found = k + searchLen <= len;
    return found ? k : -1;
}

由于k + searchLen(0)为<= len(0),因此返回k(0)`。

实时示例:

function indexOf(searchString, position = 0) {
    let s = String(this);
    let searchStr = String(searchString);
    let len = s.length;
    let start = Math.min(Math.max(position, 0), len);
    let searchLen = searchStr.length;
    let k = 0;
    while (k + searchLen <= len) {
        if (s.substring(k, k + searchLen) === searchStr) {
            break;
        }
        ++k;
    }
    const found = k + searchLen <= len;
    return found ? k : -1;
}

console.log(indexOf.call("abcd", ""));

另一种看待它的方式是this answer与Java ...或一般生活有关。


通过非字符串传递您的问题:第一步是:

  

searchStr 是? ToString( searchString )。

...在我上面的粗略代码中为let searchStr = String(searchString);。这意味着false变成"false",而undefined变成"undefined""abc"不包含"false""undefined"