0

我的 IDE 说var x = false | isIE;可以简化为var x = isIE;.

这是真的吗?

有什么我应该知道的棘手的 JavaScript 业务吗?

isIE定义为:

function ms_ie() {
    var ua = window.navigator.userAgent;
    var old_ie = ua.indexOf('MSIE ');
    var new_ie = ua.indexOf('Trident/');
    var edge = ua.indexOf('Edge/');

    if ((old_ie > -1) || (new_ie > -1) || (edge > -1)) {
        return true;
    }
    return false;
}
4

2 回答 2

4

很可能您想使用逻辑 OR运算符,它是||(双管道)不是|(正如您所指出的,它是按位 OR运算符)。在这种情况下,答案是肯定的,因为操作将始终跳过false值 ( false || something === something)。

就位运算符而言,您应该知道它们对 32 位值进行操作,因此如果您使用的值大于 32 位数字可以容纳的值,您的数据将被截断。您可以在 MDN 关于位运算符的文章中阅读有关此内容的更多信息。编辑:澄清 - 按位运算符会将任何值转换为Number值(具体而言,转换为32 位 Integer)。

于 2017-08-24T17:18:55.963 回答
1

在布尔代数0 | 0 == 0中,0 | 1 == 1可以翻译为false | false == 0false | true == 1

这是 JavaScript,所以 ifisIE是 a Booleannull或者undefined这将强制转换为 Integer 并且您将始终以0or结尾1

于 2017-08-24T17:17:23.000 回答