在变量声明中使用条件

时间:2013-06-24 11:22:17

标签: javascript variables conditional-statements

我正在尝试检测浏览器上的“请勿跟踪”设置...原始工作代码为:

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");
}

3 个答案:

答案 0 :(得分:3)

你不能这样。表达式"yes" || "1"在遇到时进行评估。因此,您最终会将DNTmsDNT"yes"进行比较。之后无法告诉JS评估表达式。即便如此,DNT === "yes" || "1"DNT === ("yes" || "1")也不会产生预期效果。

这是一个替代解决方案,它只是测试DNTmsDNT的值是否存在于对象中的属性:

var DNTtrue = {"yes": true, "1": true};

if (DNTtrue[DNT] || DNTtrue[msDNT]) {
    // ...    
}

如果DNTmsDNT的值与"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不是