Объясните пожалуйста почему null?

156
31 января 2020, 08:10

Извините, если вопрос глупый, но почему в данном случае в переменной x лежит null:

var x = 2 && 1 && null && 0 && undefined; 
 
console.log(x);

в этом единица:

var x = 2 && 1; 
 
console.log(x);

а в этом 2:

var x = 1 && 2; 
 
console.log(x);

А тут 3:

console.log(null || 2 && 3 || 4);

Answer 1

Я не силен в js, но скорее всего тут все так же как и в других языках. Логические операторы выполняются по такому принципу, что если результат известен по одному операнду, то второй не вычисляется.

Логическое И && вернет первый операнд, если он при приведении к логическому типу дает false, причем дальше вычисление не производится, то есть a() && b() не будет вычислять b(), если a вернуло то, что привелось к false. Иначе вернет второй операнд.

Логическое ИЛИ || - наоборот, возвращает первый операнд, если он истинный.

Пример с &&

var x = 2 && 1 && null && 0 && undefined;

2 приведется к true

var x = 1 && null && 0 && undefined;

1 тоже

var x = null && 0 && undefined;

а вот null приведется к false, поэтому дальше ничего не вычисляем.

Пример с ||

Пример с || вернет 1, потому что это первый попавшийся "истинный" операнд.

var x = null || 0 || undefined || 1 || true || false; 
console.log(x);

Пример с обоими операторами.

Приоритет оператора && выше, чем у ||. Значит, выражение

null || 2 && 3 || 4

будет посчитано как

null || (2 && 3) || 4

null приводится к false, поэтому получаем

(2 && 3) || 4

в скобках будет 3

3 || 4

и получаем 3.

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

console.log(true || 2 && 3 || 4);

Answer 2
let x = 1 && 2

Смысл в том, что если первое значение верно, то присвоит второе, если же одним из условий будет null, то и вернёт null в переменную. Концепция думаю понятна.

Если

let x = 3 || 4

Парсер выбирает то, что первым будет true, то есть 3 === true Вот он его и выбрал, если будет let x = 0 || 4 , то x будет равен 4.

READ ALSO
Как анимировать SVG фильтр FeComponentTransfer?

Как анимировать SVG фильтр FeComponentTransfer?

Кто-нибудь знает, как использовать тег animate в feFuncRGB в feComponentTransfer? У меня есть фильтр SVG, и мне нужно показать / скрыть его по щелчку с transition

140
Выборка по дате с количеством записей

Выборка по дате с количеством записей

Есть следующая таблица:

146
Объединение таблиц по общей дате

Объединение таблиц по общей дате

Есть две выборки из таблиц с общим столбцом date:

139