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;