我的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 :(得分:4)
您很可能想要使用逻辑OR 运算符,||
(双重管道)而不是|
(正如您所指出的那样,是< strong>按位OR 运算符)。在这种情况下,答案为 YES ,因为操作将始终跳过false
值(false || something === something
)。
对于按位运算符,您应该知道它们是以32位值运行的,因此如果您使用的值大于32位数字可以容纳的值,那么您的数据将被截断。您可以阅读有关此on MDN article about Bitwise Operators的更多信息。 编辑以澄清 - 按位运算符会将任何值转换为数字值(对于 32位整数,具体而言)。
答案 1 :(得分:1)
在布尔代数0 | 0 == 0
,0 | 1 == 1
,可以翻译为false | false == 0
或false | true == 1
这是JavaScript,因此如果isIE
是Boolean
,null
或undefined
,则会对整数进行投射,并且您始终以{{结尾1}}或0