字符串比较在Javascript中失败

时间:2012-01-02 09:35:56

标签: javascript

我正在使用Alert()只是为了确保“Login”和页面上元素的innerHTML之间匹配。

var statusElement = document.getElementById('logged-in-status');
var currentLoggedInStatus = statusElement.innerHTML;

    alert("innerHTML is: " + currentLoggedInStatus);

当弹出警告框时,它会显示: innerHTML是:登录

    var stringComp = (currentLoggedInStatus == "Login");
    alert("stringComp is: " + stringComp);

当弹出第二个警告框时,它会显示: stringComp为:false

所以这个'if'语句中的代码ERRONEOUSLY执行。我不知道怎么样 第一个警告()清楚地说明innerHTML是'登录'而且里面的代码是 'if'语句正确执行并执行。我试过围绕'登录'的单引号 它没有帮助。

    if(currentLoggedInStatus != "Login")
    {
       navBarLoginStatusTextElement.innerHTML = 'Login';
    }

重申一下,innerHTML = Login,当我将innerHTML与Login进行比较时 它说它们不一样!

为什么我上面的javascript比较失败了?

编辑:这是块元素和设置'Login'值的php函数:

<a id="logged-in-status" 
       href="http://localhost/myProj/justAfile.php"><?php echo getLoginStatusStr();?> </a>

并且在php块中是函数:

 function getLoginStatusStr()
 {
      return 'Login';
 }

5 个答案:

答案 0 :(得分:3)

  

请JS编写代码,或者尽可能链接到它。我可能会   建议innerHTML实际上是“登录”而不是“登录”......   因此,将调试警报更改为警报(“stringComp is:'”+   currentLoggedInStatus +“'”);请验证这一点。

将我原来的评论作为实际答案发布。

修改:正如我想的那样,

href="http://localhost/myProj/justAfile.php"><?php echo getLoginStatusStr();?> </a>

看到白色空间?删除它,使其看起来像

 href="http://localhost/myProj/justAfile.php"><?php echo getLoginStatusStr();?></a>

答案 1 :(得分:3)

正如其他人所说,HTML代码中可能还有一个额外的空格。试试trim

function trim(str) {
  return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

var stringComp = (trim(currentLoggedInStatus) == "Login");

那就是说,我建议你检查你的逻辑的HTML代码内容 - 你永远不知道什么浏览器(或脚本)对你的代码做了什么。更好地使用专用的状态变量或类似的东西。

答案 2 :(得分:1)

你可能在原始字符串中有一些额外的空格,这在alert()中是不可见的,但会导致比较失败。

答案 3 :(得分:1)

String.prototype.trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};

然后var currentLoggedInStatus = statusElement.innerHTML.trim();

答案 4 :(得分:0)

我还认为你的字符串中有一些额外的空格。使用警报检查此方法的最简单方法是将字符串的长度添加到警报消息。通过这种方式,您可以看到哪个字符串包含空格/ s(如果有)。

当我处理类似的问题时,我发现了另外一个问题。如果传入的字符串为空终止,则修剪函数将不起作用。您可以使用切片函数来摆脱空终止符。