Использование false с побитовым оператором ИЛИ
Моя 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 | 0 == 0
, 0 | 1 == 1
который можно перевести на false | false == 0
или же false | true == 1
Это JavaScript, так что если isIE
это Boolean
, null
или же undefined
это приведёт к Integer, и вы всегда закончите 0
или же 1
Скорее всего, вы хотите использовать логический оператор ИЛИ, который ||
(двойная труба) нет |
(который, как вы указали, является побитовым оператором ИЛИ). В этом случае ответ ДА, так как операция всегда будет пропускать false
значение (false || something === something
).
С точки зрения побитовых операторов вы должны знать, что они работают с 32-битными значениями, поэтому, если вы используете значения, большие, чем может содержать 32-битное число, ваши данные будут усечены. Вы можете прочитать больше об этом в статье MDN о побитовых операторах. Редактировать: уточнить - побитовые операторы приведут любое значение к числовому значению (32-разрядное целое число, если быть точным).