Подтвердить что ты не робот

Какая разница между (|) и (||)?

В чем разница между | и || в Javascript?

Кроме того, какая разница между & и &&?

4b9b3361

Ответ 1

| является поразрядным или || является логическим или.

Поразрядный или принимает два числа и сравнивает их поэтапно, создавая новое целое число, которое объединяет 1 бит с обоих входов. Итак, 0101 | 1010 создаст 1111.

Логический или || проверяет "правдоподобие" значения (зависит от типа, для целых чисел 0 - false и ненулевое значение - true). Он оценивает утверждение слева направо и возвращает первое значение, которое является правдивым. Таким образом, 0101 || 1010 вернет 0101, что является правдивым, поэтому весь оператор называется истинным.

Такой же тип логики применяется для & vs &&. 0101 & 1010= 0000. Однако 0101 && 1010 оценивается как 1010 (&& возвращает последнее правное значение, если оба операнда правдивы).

Ответ 2

Разница заключается в том, что логические операторы рассматривают только каждый вход по номинальной стоимости, рассматривая их как целые, а побитовые операторы работают на уровне бит:

var thetruth = false;
var therest = true;

var theuniverse = thetruth && therest; //false
var theparallel = thetruth && thetruth; //true

var theindifferent = thetruth || therest; //true
var theideal = thetruth || thetruth; // false

var thematrix = 5346908590;
var mrsmith = 2354656767;

var theoracle = thematrix & mrsmith; //202445230
var theone = thematrix | mrsmith; //7499120127

Ответ 3

Другое отличие состоит в том, что || использует ярлык. То есть, он оценивает только правую сторону, если левая сторона false (или преобразуется в false в булевом контексте, например 0, "", null и т.д.). Аналогично, && оценивает только правую сторону, если левая сторона true (или ненулевая, непустая строка, объект и т.д.). | и & всегда оценивают обе стороны, потому что результат зависит от точных бит в каждом значении.

Обоснование заключается в том, что для ||, если обе стороны истинны, все выражение истинно, поэтому нет необходимости оценивать его дальше. && является тем же, но обратным.

Точная логика для || заключается в том, что если левая сторона является "правдивой", верните это значение (обратите внимание, что она не преобразована в логическое), в противном случае оценивают и возвращают Правая сторона. Для &&, если левая сторона "ложна", верните ее, иначе оцените и верните правую сторону.

Вот несколько примеров:

false && console.log("Nothing happens here");
true || console.log("Or here");
false || console.log("This DOES get logged");
"foo" && console.log("So does this");

if (obj && obj.property) // make sure obj is not null before accessing a property

Ответ 4

Чтобы объяснить немного больше в неспециалистских терминах:

&& и || являются логическими операторами. Это означает, что они используются для логического сравнения;

if (a == 4 && b == 5)

Это означает: "Если a равно четырем, а b равно пяти"

| и & являются побитовыми операторами. Они работают на битах определенным образом, которые подробно описываются в статье wiki:

http://en.wikipedia.org/wiki/Bitwise_operation

Ответ 5

еще одна точка, которую я хочу добавить: || оператор используется для назначения значения по умолчанию в случае, если назначенное значение undefined. Итак, для Exapmle вы назначаете obj для какого-либо объектного теста, и если вы не хотите, чтобы тест был undefined, вы можете сделать следующее, чтобы гарантировать, что значение теста не будет undefined.

var test = obj || {};

поэтому в случае, если obj undefined, тогда тестовое значение будет пустым.

Таким образом, он также используется для назначения значения по умолчанию вашему объекту.