Логические операторы и операторы сравнения

Логические операторы

Логические операторы рассматривают свои операнды как boolean значения.

Логические операторы возвращают не boolean значения а свои операнды... это может показаться странным, но из примеров будет примерно понятно зачем это

Логическое И &&

Этот оператор вернет первый операнд если его приведение к boolean равно false, иначе будет возвращен второй операнд

1 && 4; // 4
0 && 4; // 0
4 && 5 && 10; // 10
var task1 = true; // готовность задач
var task2 = true;
var task3 = false;
if (task1 && task2 && !task3) {
// первые две задачи готовы, не готова только последняя
console.log("Уже почти все готово!");
}

Логическое ИЛИ ||

Этот оператор вернет первый операнд если его приведение к boolean равно true, иначе будет возвращен второй операнд

// Задача: вывести в консоль имя, а если имени нет, то фамилию, в противном случае, отсутствия обоих выведет надпись "undefined name"
var first_name = "Tim";
var last_name = "Burton";
console.log(first_name || last_name || "undefined name"); // Выведет в консоль "Tim"
first_name = "";
last_name = "Pitt";
console.log(first_name || last_name || "undefined name"); // Выведет в консоль "Pitt"

Логическое НЕ !

Возвращает false если значение операнда можно привести к true; в противоположном случае возвращает true.

!false; // true
!!false; // false, эквивалент !(!(false))
!true; // false
!!true; // false

Операторы сравнения

Нестрогое равенство ==

Лучше не использовать нестрогие сравнения. Это может привести к странным явлениям.. которые придется потом отлавливать.

1 == 1; // true
1 == 2; // false
// почему не следует использовать нестогое равенство
1 == "1"; // true
0 == false; // true

Нестрогое неравенство !=

1 != 1; // false
2 != 4; // true
2 != "2"; // false

Строгое равенство ===

1 === 1; // true
1 === 2; // false
1 === "1"; // false
0 === false; // false

Строгое неравенство !==

1 !== 1; // false
2 !== 4; // true
2 !== "2"; // true

Сравнения >, >=, <, <=

1 < 5; // true, 1 меньше 5
5 > 1; // true, 5 больше 1
5 <= 5; // true, 5 меньше или равен 5
true > false; // true, здесь произойдет приведение операндов к number
"a" > "b"; // false, 97 > 98
"a" > "A"; // true, 97 > 65
"cba" > "cba"; // false, сравнение пройдет по последнему символу, примерно так же как и если бы мы сортировали фамилии в списке
"cba" >= "cba"; // true
caution

Обратите внимание на сравнение строк! Для сравнения строк интерпретатор будет сравнивать эти строки по их ASCII представлению

Вот пара строчек кода для того чтобы поиграться с этим: "ABC".charCodeAt(0) // returns 65 String.fromCharCode(65,66,67); // returns 'ABC'_