Использование 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-разрядное целое число, если быть точным).

Другие вопросы по тегам