将 false 与按位或运算符一起使用
Using false with the bitwise OR operator
我的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;
}
在布尔代数中 0 | 0 == 0
,0 | 1 == 1
可以翻译成 false | false == 0
或 false | true == 1
这是 JavaScript,所以如果 isIE
是 Boolean
、null
或 undefined
,这将转换为 Integer,您将始终以 0
或 1
结尾
您很可能想使用 逻辑 OR 运算符,它是 ||
(双竖线)而不是 |
(正如您指出,是一个 按位或 运算符)。在这种情况下,答案是 YES,因为该操作将始终跳过 false
值 (false || something === something
)。
就 按位 运算符而言,您应该知道它们对 32 位值进行运算,因此如果您使用的值大于 32 位数字所能容纳的值,您的数据将被截断。您可以阅读有关此内容的更多信息 on MDN article about Bitwise Operators。 编辑: 澄清 - 按位运算符会将任何值转换为 Number 值(转换为 32 位整数,具体而言)。
我的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;
}
在布尔代数中 0 | 0 == 0
,0 | 1 == 1
可以翻译成 false | false == 0
或 false | true == 1
这是 JavaScript,所以如果 isIE
是 Boolean
、null
或 undefined
,这将转换为 Integer,您将始终以 0
或 1
您很可能想使用 逻辑 OR 运算符,它是 ||
(双竖线)而不是 |
(正如您指出,是一个 按位或 运算符)。在这种情况下,答案是 YES,因为该操作将始终跳过 false
值 (false || something === something
)。
就 按位 运算符而言,您应该知道它们对 32 位值进行运算,因此如果您使用的值大于 32 位数字所能容纳的值,您的数据将被截断。您可以阅读有关此内容的更多信息 on MDN article about Bitwise Operators。 编辑: 澄清 - 按位运算符会将任何值转换为 Number 值(转换为 32 位整数,具体而言)。