String.indexOf函数的意外结果?

Jim*_*ing 3 javascript string google-chrome indexof

我真的把头发拉出来......

这是情况.我有两个javascript字符串如下:

dsName = "Test 1"
replacementString = "Test "
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码查看dsName是否以replacementString开头:

if(dsName.indexOf(replacementString) == 0)
{
    // I never get here!
}
Run Code Online (Sandbox Code Playgroud)

indexOf返回-1 !! 这怎么可能?我可以在该行之前的Chrome脚本调试中放置一个断点,并将"dsName.indexOf(replacementString)"粘贴到控制台中,看它确实返回-1.

现在只是为了证明我没有疯狂,我可以从同一个断点打印出dsName,它确实等于"Test 1",而replacementString则等于"Test".以下是Chrome调试控制台的实际屏幕截图:

在此输入图像描述

所以你可以看到,如果我粘贴文字字符串,它按预期工作,但如果我使用该变量,它不起作用.我甚至尝试过String(replacementString)和replacementString.toString()来查看它是否是一个类型问题,但它做了同样的事情.

如果indexOf的参数是文字字符串,它就像它有效,但如果它是字符串变量则不行.

我疯了吗,有什么东西让我觉得愚蠢吗?或者这可能是Chrome中的错误?

Wol*_*gel 6

看起来像空格的一些字符实际上并不是简单的空格.试试看这个字符串真正包含的内容:

for (var i=0; i<replacementString.length; i++) 
    console.log(replacementString.charCodeAt(i));
Run Code Online (Sandbox Code Playgroud)

你可以用这样的常规空格替换不间断的空格:

replacementString = replacementString.replace(String.fromCharCode(160), " ");
Run Code Online (Sandbox Code Playgroud)