JavaScript 10 — Логические операторы
Булева логика
Булева логика — это система логики, которая имеет дело с истинными и ложными значениями. В программировании логическая логика широко используется для принятия решений и управления ходом программы.
Три основных логических оператора в булевой логике — И, ИЛИ и НЕ.
- И : Оператор И возвращает значение true, только если оба операнда истинны.
- ИЛИ : Оператор ИЛИ возвращает значение true, если один или оба операнда истинны.
- НЕ : оператор НЕ возвращает противоположное заданному операнду значение.
Логические операторы в коде
В JavaScript есть три логических оператора: &&(И), ||(ИЛИ) и !(НЕ). Эти операторы часто используются для объединения логических значений и управления ими в JavaScript.
&& (И) оператор
Оператор &&возвращает значение true, если оба операнда равны true, и falseв противном случае. Вот некоторые примеры:
// Normal examples
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
// Type coercion examples
console.log("hello" && 42); // 42
console.log("" && 42); // ""
- Этот
&&оператор известен как оператор короткого замыкания, потому что он оценивает второй операнд только в том случае, если первый операнд истинен. Это может быть полезно для оптимизации кода и предотвращения ошибок.
Оператор ||возвращает значение true, если хотя бы один из операндов равен true, и falseв противном случае. Вот некоторые примеры:
// Normal examples
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
// Type coercion examples
console.log("" || "hello"); // "hello"
console.log(0 || 42); // 42
- Оператор
||также является оператором короткого замыкания, оценивающим второй операнд только в том случае, если первый операнд ложен. - Оператор
||часто используется для предоставления значений по умолчанию для переменных, как вconst value = input || defaultValue;.
Оператор !инвертирует логическое значение, возвращая значение, trueесли операнд равен false, и falseесли операнд равен true. Вот некоторые примеры:
// Normal examples
console.log(!true); // false
console.log(!false); // true
// Type coercion examples
console.log(!"hello"); // false
console.log(!undefined); // true
- Оператор
!можно использовать для преобразования значения в логический тип путем его двойного отрицания, как в!!value.
Порядок логических операторов
Порядок логических операторов может иметь значение в некоторых случаях, когда необходимо оценить несколько условий. Вот некоторые примеры:
Приоритет оператора: логическое И ( &&) имеет более высокий приоритет, чем логическое ИЛИ ( ||). Это означает, что &&он оценивается раньше ||и может изменить результат условия. Например:
// This condition will evaluate to true
if (true || false && true) {
// do something
}
// This condition will evaluate to false
if ((true || false) && true) {
// do something
}
Во втором примере (true || false)сначала вычисляется true. Затем true && trueоценивается, что приводит к true. Все условие также верно, но оценивается по-другому из-за скобок.
Оценка короткого замыкания: логическое И ( &&) и логическое ИЛИ ( ||) используют оценку короткого замыкания, что означает, что второй операнд оценивается только в случае необходимости. Например:
// This condition will evaluate to true without an error
if (x !== null && x.property === "value") {
// do something
}
// This condition will throw an error
if (x.property === "value" && x !== null) {
// do something
}
Во втором примере, если xis null, x.propertyбудет выдано сообщение об ошибке, потому что nullу него нет свойств. Второй операнд оценивается перед первым операндом, что может привести к ошибкам при неосторожном использовании.
Отрицание: логическое НЕ ( !) может изменить результат условия, отрицая его. Например:
let x = true;
// This condition will evaluate to false
if (!x) {
// do something
}
// This condition will evaluate to true
if (!!x) {
// do something
}
Начинающему важно обращать внимание на порядок логических операторов и использовать круглые скобки для уточнения порядка, если это необходимо. Также важно понимать оценку короткого замыкания и то, как она может предотвратить ошибки. Отрицание следует использовать с осторожностью, поскольку оно может затруднить чтение и понимание условий.
Примеры из реального мира
Вот несколько реалистичных примеров логических операторов, используемых в коде. Прочтите примеры и посмотрите, сможете ли вы понять логику, но не расстраивайтесь, если не сможете, поскольку мы еще не обсуждали функции!
Проверка пользовательского ввода:
function validateInput(input) {
const isString = typeof input === 'string';
const isNotEmpty = input !== '';
const isLessThanTenChars = input.length < 10;
return isString && isNotEmpty && isLessThanTenChars;
}
function filterProducts(products, minPrice, maxPrice, availableOnly) {
return products.filter(product => {
const isWithinPriceRange = product.price >= minPrice && product.price <= maxPrice;
const isAvailable = availableOnly ? product.stock > 0 : true;
return isWithinPriceRange && isAvailable;
});
}
function isEligibleForDiscount(user) {
const hasPaid = user.orders.some(order => order.status === 'paid');
const hasFrequentOrders = user.orders.length >= 5;
const hasValidCoupon = user.coupons.includes('DISCOUNT2022');
return (hasPaid || hasFrequentOrders) && hasValidCoupon;
}
function isProductOnSale(product) {
const isDiscounted = product.discount > 0;
const hasLowStock = product.stock <= 10;
return isDiscounted || hasLowStock;
}
function getTaskStatus(priority, isComplete) {
const isUrgent = priority === 'high' || priority === 'urgent';
const isOverdue = priority === 'low' && !isComplete;
const isInProgress = priority === 'medium' && !isComplete;
if (isUrgent) {
return 'Urgent';
} else if (isOverdue) {
return 'Overdue';
} else if (isInProgress) {
return 'In Progress';
} else {
return 'Pending';
}
}
![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































