JavaScript条件匹配但没有返回真实?

时间:2010-07-02 16:13:17

标签: javascript if-statement

请查看以下内容:

jQuery(document).ready(function() { 
    var full_url = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;    
    var part_url = window.location.protocol + "//" + window.location.host + "/domain/shop/";    
    part_url = part_url + "cat1/";

    if (full_url == part_url)
    {
        jQuery("li.cat1").addClass("current");  
    }    
});

出于某种原因,上述代码永远不会成为现实,我很困惑为什么。我已经单独提醒变量“part_url”和“full_url”,它们都匹配,为什么if语句没有返回true?我知道这可能是我错过的傻事......

3 个答案:

答案 0 :(得分:1)

你确定它没有回归真实吗?尝试:

alert(full_url == part_url);

这将表明字符串是否不匹配,或者if的内容是否只是没有效果。

如果它是大写/小写的问题,那么最好使用toLowerCase()来比较正则表达式,否则你可以得到错误/错误匹配(如果URL包含正则表达式字符):

if (full_url.toLowerCase() == part_url.toLowerCase()) { ... }

如果不是这样 - 试试:

  • 检查字符串的长度:

    alert(full_url.length); alert(part_url.length);
    
  • 在字符串上使用substr来缩小不匹配的部分:

    alert(full_url.substr(1,20) == part_url(substr(1,20));
    

    (甚至可以使用一个循环来逐个字符地比较 - 它可能是数字'1'而不是字母'l'......)

答案 1 :(得分:0)

如果等于运算符说false,那么无论你多么相信它们,它们就不一样了。 ;)试试这个:

var test = function (s, t)
{
    var sl = s.length;
    var tl = t.length;
    var l  = sl < tl ? sl : tl;
    for (var i = 0; i < l && s[i] == t[i]; ++i) /* empty */;
    if (i < l || sl != tl) {
        print("common head: '" + s.substr(0, i) + "'");
        print("tail s: '" + s.substr(i) + "'");
        print("tail t: '" + t.substr(i) + "'");
    }
};

答案 2 :(得分:0)

window.location.host + "/" + window.location.pathname; 

location.pathname包含前导/,因此您将在主机名后面用两个斜杠创建http://www.example.com//domain/shop/cat1。显然,这永远不会匹配。优化你的眯着眼睛,看看他们是否是同样的力量!