String.indexOf函数的意外结果?

时间:2014-01-17 20:48:58

标签: javascript string google-chrome indexof

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

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

dsName = "Test 1"
replacementString = "Test "

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

if(dsName.indexOf(replacementString) == 0)
{
    // I never get here!
}

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

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

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:6)

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

for (var i=0; i<replacementString.length; i++) 
    console.log(replacementString.charCodeAt(i));

您可以使用以下常规空格替换不间断空格:

replacementString = replacementString.replace(String.fromCharCode(160), " ");

答案 1 :(得分:1)

感谢沃尔夫冈让我走上正确的道路来解决这个问题,但事实证明这是完全意想不到的事情......

我从样式为<textarea>的{​​{1}}中提取了replacementText的值。我想当nowrap打开时,它会将空格返回为非中断(ASCII代码160)而不是常规空格。

这是一个js-fiddle,可以看到发生了什么:http://jsfiddle.net/Jk9Cw/

你们觉得怎么样?这是“你应该知道的”还是“哇,这是我以前从未遇到的事情”?