我正在尝试检测浏览器上的“请勿跟踪”设置...原始工作代码为:
if(navigator.doNotTrack == "yes" || navigator.doNotTrack == "1" || navigator.msDoNotTrack == "1"){
alert("true");
}else{
alert("false");
}
我正在尝试稍微重写它,我想知道如何在变量声明中使用条件?我想出了一个无法解决的片段,我想知道是否有人可以帮助我?
var DNT = navigator.doNotTrack,
msDNT = navigator.msDoNotTrack,
DNTtrue = "yes" || "1";
if(DNT === DNTtrue || msDNT === DNTtrue){
alert("true");
}else{
alert("false");
}
答案 0 :(得分:3)
你不能这样。表达式"yes" || "1"
在遇到时进行评估。因此,您最终会将DNT
和msDNT
与"yes"
进行比较。之后无法告诉JS评估表达式。即便如此,DNT === "yes" || "1"
或DNT === ("yes" || "1")
也不会产生预期效果。
这是一个替代解决方案,它只是测试DNT
或msDNT
的值是否存在于对象中的属性:
var DNTtrue = {"yes": true, "1": true};
if (DNTtrue[DNT] || DNTtrue[msDNT]) {
// ...
}
如果DNT
或msDNT
的值与"yes"
和"1"
不同,则DNTtrue[...]
会尝试访问不存在的属性,这将导致undefined
(假值)。
答案 1 :(得分:1)
在现代浏览器中,您可以使用数组和indexOf()
方法:
DNTtrue = ["yes", "1"];
if(DNTtrue.indexOf(DNT) > -1 || DNTtrue.indexOf(msDNT) > -1){
alert("true");
}else{
alert("false");
}
答案 2 :(得分:0)
在if语句中尝试DNT.value 使DNTtrue = true不是