Что означает «a | = b» в JS / TS, если оно действительно для начала? - PullRequest
1 голос
/ 12 апреля 2020

Когда я вижу выражение

let a : number = 3;
a = a + 5;

, я немедленно изменяю его на

let a : number = 3;
a += 5;

, и в обоих случаях результат равен a === 8 (Я добавил тип переменной для ясности). Однако логическое выражение того же шаблона

let b : boolean = false;
b = b || true;

не эквивалентно

let b : boolean = false;
b |= true;

, поскольку оно создает число. Теперь число коррелирует с true , так как оно ненулевое (и наоборот, оно соответствует false в противоположном случае, так как возвращает ноль). Так что, конечно, есть определенная логика c.

Меня беспокоит, что я не могу объяснить, почему это происходит.

Все примеры были выполнены в Chrome. консоль, и я не совсем уверен, происходит ли преобразование в число из логического из-за моей операции или воспроизведения в браузере или, возможно, чего-то еще.

1 Ответ

4 голосов
/ 12 апреля 2020

| - побитовая операция ИЛИ. || - логическая операция ИЛИ. |= является сложным побитовым оператором присваивания ИЛИ. Не существует эквивалентного оператора ||= для || в JavaScript (хотя было добавлено разговоров о его добавлении) и, таким образом, вы не можете выполнить этот рефакторинг с помощью || (или && ), по крайней мере на данный момент. (Ну ... вы можете, если вы используете Babel, так как есть плагин для этого предложения.)

...