与按位OR运算符一起使用false

时间:2017-08-24 17:14:43

标签: javascript bit-manipulation bitwise-operators bitwise-or

我的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;
}

2 个答案:

答案 0 :(得分:4)

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

对于按位运算符,您应该知道它们是以32位值运行的,因此如果您使用的值大于32位数字可以容纳的值,那么您的数据将被截断。您可以阅读有关此on MDN article about Bitwise Operators的更多信息。 编辑以澄清 - 按位运算符会将任何值转换为数字值(对于 32位整数,具体而言)。

答案 1 :(得分:1)

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

这是JavaScript,因此如果isIEBooleannullundefined,则会对整数进行投射,并且您始终以{{结尾1}}或0