Извините, если вопрос глупый, но почему в данном случае в переменной 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);
Я не силен в 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);
let x = 1 && 2
Смысл в том, что если первое значение верно, то присвоит второе, если же одним из условий будет null, то и вернёт null в переменную. Концепция думаю понятна.
Если
let x = 3 || 4
Парсер выбирает то, что первым будет true, то есть
3 === true
Вот он его и выбрал, если будет let x = 0 || 4 , то x будет равен 4.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей