在如何检查 url 是否包含给定字符串的问题中。Javascript/jquery 答案检查 url 是否包含给定的字符串。我想扩展它以检查它是否包含两个东西 name=franky && gender=male。我试过
if(window.location.href.indexOf("name=franky" && "gender=male") > -1)
最初似乎有效,但经过进一步测试,我发现如果只有姓名或性别之一存在,它似乎有效。我在哪里错了?
在如何检查 url 是否包含给定字符串的问题中。Javascript/jquery 答案检查 url 是否包含给定的字符串。我想扩展它以检查它是否包含两个东西 name=franky && gender=male。我试过
if(window.location.href.indexOf("name=franky" && "gender=male") > -1)
最初似乎有效,但经过进一步测试,我发现如果只有姓名或性别之一存在,它似乎有效。我在哪里错了?
您可以将其分成两部分并调用 indexOf 两次,而不是尝试在同一个调用中检查两个字符串。像这样的东西:
if(window.location.href.indexOf("name=franky") > -1 &&
window.location.href.indexOf("gender=male") > -1)
该.indexOf()
函数仅查找单个字符串。要测试两个字符串,您需要.indexOf()
根据 Christofer 的回答两次调用:
if(window.location.href.indexOf("name=franky") > -1 &&
window.location.href.indexOf("gender=male") > -1)
我发布答案的原因也是为了简要解释&&
运算符的工作原理:给定expr1 && expr2
,&&
运算符 “ expr1
如果可以转换为 false,则返回;否则,返回 expr2
。”
“转换为假”是什么意思?基本上null
, undefined
, 0
, NaN
and ""
(empty string) 是“假的”,将被“转换为假”。非零数字、非空字符串和任何对象都是“真实的”,并将被转换为真实。
这意味着当您说操作员测试"name=franky" && "gender=male"
第&&
一个操作数时,发现(在这种情况下)它不能转换为 false,所以它返回"gender=male"
. 所以你的代码在某些时候似乎工作的原因是它实际上是这样做的:
if(window.location.href.indexOf("gender=male") > -1)
另一种通用方法
function CheckIfAllQueryStringsExist(url, qsCollection) {
for (var i = 0; i < qsCollection.length; i++) {
if (url.indexOf(qsCollection[i]) == -1) {
return false;
}
}
return true;
}
像这样称呼它。
var myUrl = window.location.href;
var queryStrings = ["name=franky", "gender=male"];
var allPresent = CheckIfAllQueryStringsExist(myUrl, queryStrings);