我真的在这件事上扯了我的头发......
情况是这样的。我有两个 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 中的错误?
最佳答案
看起来有些看起来像空格的字符实际上并不是简单的空格。试试这个看看字符串真正包含什么:
for (var i=0; i<replacementString.length; i++)
console.log(replacementString.charCodeAt(i));
您可以用这样的常规空格替换不间断空格:
replacementString = replacementString.replace(String.fromCharCode(160), " ");
关于javascript - String.indexOf 函数的意外结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195583/