Javascript IE检测:这到底是什么意思?

Javascript IE检测:这到底是什么意思?,javascript,internet-explorer,Javascript,Internet Explorer,我正在看一段检测IE浏览器的代码: if (false || !!document.documentMode) 我不理解这个装置。为什么有必要或用假而不使用两次 如果我只是在IE9、FF或Opera中加载了下面的文件,IE会告诉我存在文档模式,而后面两个则会说相反: <html> <head> <script>function ld() { if (document.documentMode){ documen

我正在看一段检测IE浏览器的代码:

if (false || !!document.documentMode)
我不理解这个装置。为什么有必要或用假而不使用两次

如果我只是在IE9、FF或Opera中加载了下面的文件,IE会告诉我存在文档模式,而后面两个则会说相反:

<html>
<head>
    <script>function ld() {
        if (document.documentMode){
            document.getElementById("p1").innerHTML = 'Document Mode detected'
        }
        else {
            document.getElementById("p1").innerHTML = 'No Document Mode'
        }
    }</script>
</head>
<body onload="ld()">
<p id="p1"></p>
</body>
</html>

函数ld(){
if(document.documentMode){
document.getElementById(“p1”).innerHTML='检测到文档模式'
}
否则{
document.getElementById(“p1”).innerHTML='无文档模式'
}
}


这还不够吗?为什么?这不清楚,因为如果我用我原来问题中的条件替换条件,结果将完全相同。我遗漏了什么?

因为
文档
总是被定义的,并且它的属性
文档模式
的存在是真实的,所以它们完全是同义词:

if (false || !!document.documentMode)
以及:

(如果
文档
可能未定义,则第一个代码将全部失败。)

为什么必须使用或使用false[…]

没有必要。给定的第一个操作数的
false

[…]并且不使用两次

这部分

两者一起执行“ToBoolean”类型转换,作为使用以下命令的较短版本:


此外,如果
本身

2。如果ToBoolean(GetValue(exprRef))为true
因此,当测试单个值的真实性时,
也不一定,正如您所建议的:

if (document.documentMode)

请将您的标题更改为更专业的名称。您在哪里找到代码?1)“为什么需要或使用false[…]”不是。最好的猜测是,这是出于一种习惯,即对于
if
条件需要一个布尔值,而JavaScript不需要这个值。2) “[…]并且不使用两次?”,与
Boolean(document.documentMode)
相同。虽然,在删除了
false |
之后,
if
本身将进行布尔转换,因此它们也是不必要的。@JonathanLonowski正是我所想的,但过度复制只是让我震惊,感觉我错过了一些秘密智慧。这将是一个很好的答案。
// lval || rval (minus short-circuiting)
function OR(lval, rval) {
    if (lval)
        return lval;
    else
        return rval;
}

OR(false, 'foo') // 'foo'
!!document.documentMode        // true/false
Boolean(document.documentMode) // true/false
if (document.documentMode)