我真的把头发拉出来......
这是情况。我有两个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调试控制台的实际屏幕截图:
正如您所看到的,如果我粘贴文字字符串,它会按预期工作,但如果我使用该变量,它就不起作用。我甚至尝试过String(replacementString)和replacementString.toString()来看看它是否是一个类型问题,但是它做了同样的事情。
如果indexOf的参数是文字字符串,它就像它有效,但如果它是字符串变量则不行。
我疯了吗,有什么东西让我觉得愚蠢吗?或者这可能是Chrome中的错误?
答案 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/
你们觉得怎么样?这是“你应该知道的”还是“哇,这是我以前从未遇到的事情”?