Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript条件匹配但未返回True?_Javascript_If Statement - Fatal编程技术网

JavaScript条件匹配但未返回True?

JavaScript条件匹配但未返回True?,javascript,if-statement,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/";

请看以下内容:

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呢?我知道我可能错过了一些愚蠢的事情…

你确定这不是真的吗?尝试:

alert(full_url == part_url);
这将给出一些指示,说明字符串是否不匹配,或者
的内容是否没有任何影响

如果是小写/大写问题,则最好使用
toLowerCase()
进行比较,而不是使用正则表达式,否则会出现错误/错误匹配(如果URL包含regexp字符):

如果不是这样,请尝试:

  • 检查字符串的长度:

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

    alert(full_url.substr(1,20) == part_url(substr(1,20));
    
    (甚至可以使用循环逐个字符进行比较-可能类似于数字“1”与字母“l”…)


如果相等运算符说
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) + "'");
    }
};
var测试=函数(s,t)
{
var sl=s.长度;
var tl=t.长度;
var l=sl

location.pathname
包含前导的
/
,因此您将创建
http://www.example.com//domain/shop/cat1
主机名后有两个斜杠。显然,这永远不会匹配。仔细观察琴弦,看看它们是否具有相同的力量

嗨,皮斯迈尔斯,我按照你的建议做了,得到了一些奇怪的发现。。我计算了两个变量的警报长度,它们分别是56和57,但这是踢球者,然后我把两个变量连在一起提醒,字符串是相同的……所以我不知道为什么长度不同,为什么长度不相等……我检查了所有的大小写,它们都较低,所以不是这样……还有什么想法吗?@Rick:试试“substr”这个东西——可能其中一个字符串以某种方式获得了一个“不可见”字符。例如,如果您使用前5个(比如)字符发出警报,则会显示此消息:如果您获得“http:”和“http”,则您将知道其中一个在开始处/附近有一个不可见的控件字符。并且,正如其他人所说,检查结尾处的“/”:)/domain/shop/cat1==window.location.pathname?(最后一个斜杠可能会有问题)您知道第一行:
jQuery(document).ready(function(){
可以缩短为
$(function()){
我在发布我的评论后发现了这个,所以你是对的,你也是错的!没错,它已经有斜杠了,但如果你提醒它,你会很快注意到它会去掉斜杠,所以它不会显示//正如你认为它会或应该显示的那样…这就是为什么我无法通过查看来找出它的原因。。。
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) + "'");
    }
};
window.location.host + "/" + window.location.pathname;