javascript - String.indexOf 函数的意外结果?

标签 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 中的错误?

最佳答案

看起来有些看起来像空格的字符实际上并不是简单的空格。试试这个看看字符串真正包含什么:

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/

相关文章:

c++ - 显示所有变量共有的值

javascript - 在 Chrome 中实时编辑 Javascript,就像在 Visual Studio 中编辑并继续

google-chrome - 谷歌浏览器扩展相对路径

javascript - 为什么 Chrome Date .toLocaleString() 似乎不使用 windows.navigator.language?

JavaScript 日期显示错误时区 "GMT+0521 (India Standard Time)"

regex - 在每行的开头和结尾添加字符串和标签

html - 什么是影根

javascript - 从 AngularJS 数据加载完成后获取 html body 高度

javascript - jqxgrid 基于另一列上的值的可编辑属性

Java Regex 匹配器跳过匹配项