Что значит true и false

Тип Boolean, логические операторы и операторы сравнения

Логический тип Boolean в JavaScript представляет одно из двух значений: true (истина) или false (ложь).

Значения Boolean

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

  • ДА / НЕТ
  • ВКЛ / ВЫКЛ
  • ИСТИНА / ЛОЖЬ

Именно для этих случаев в JavaScript существует логический тип данных Boolean, который может принимать только значение true (истина) или false (ложь).

Функция Boolean()

Чтобы определить, является ли выражение (или переменная) истиной (возвращает значение true), можно воспользоваться функцией Boolean():

Или можно сделать еще проще:

Все имеет «значение» True или False

Любое значение отличное от 0 имеет логическое значение true.

Логическое значение 0 (ноль) — false.

Логическое значение -0 (минус ноль) — false.

Логическое значение «» (пустая строка) — false.

Логическое значение undefined — false.

Логическое значение null — false.

Логическое значение false — false.

Логическое значение NaN — false.

Значения типа Boolean могут быть объектами

Обычно, логические значения типа Boolean определяются примитивными литералами:

Однако, в JavaScript при помощи ключевого слова new логические значения также можно определить и как объекты:

Тем не менее, не определяйте значения типа Boolean как объекты. Это замедляет скорость выполнения скрипта. Кроме этого, ключевое слово new в данном случае усложняет код и может привести к неожиданным результатам:

При использовании оператора сравнения ==, одинаковые значения типа Boolean равны:

Однако, при использовании оператора сравнения ===, одинаковые значения типа Boolean не будут равными, потому что оператор === ожидает совпадения как по значению, так и по типу.

Или еще хуже. Объекты не сравниваются:

Обратите внимание на разницу между (x==y) и (x===y).

Сравнение двух объектов JavaScript всегда возвращает ложь (false).

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

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

Значения типа Boolean лежат в основе всех сравнений и условий в JavaScript.

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

Операторы сравнения используются в логических выражениях для определения совпадения или различия между переменными или значениями.

Предположим, что у нас есть x = 5. Следующая таблица объясняет операторы сравнения:

Оператор Описание Выражение Возвращает
== равно x == 8
x == 5
x == «5»
false
true
true
=== равно по значению и типу x === 5
x === «5»
true
false
!= не равно x != 8 true
!== не равно ни по значению, ни по типу x !== 8
x !== 5
x !== «5»
true
false
true
> больше чем x > 8 false
< меньше чем x < 8 true
>= больше или равно x >= 8 false
<= меньше или равно x <= 8 true

Как это можно использовать

Операторы сравнения используются в выражениях условий для сравнения значений и принятия решения в зависимости от полученного результата:

Подробнее об условных выражениях будет рассказано в следующей главе этого учебника.

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

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

Предположим, у нас есть x = 6 и y = 3. Следующая таблица объясняет логические операторы:

Оператор Описание Пример
&& И (x < 10 && y > 1) — true
|| ИЛИ (x == 5 || y == 5) — false
! НЕ !(x == y) — true

Оператор ! также используется для быстрого преобразования выражения к логическому значению:

Условный (тернарный) оператор

В JavaScript есть особый условный оператор, который присваивает переменной значение в зависимости от заданного условия.

имя_переменной = (условие) ? значение1 : значение2

В данном примере если в переменной age значение меньше 18, то переменной voteable будет присвоена строка «Слишком молод», в обратном случае переменной voteable будет присвоена строка «Возраст подходит».

Сравнение разных типов

Сравнение данных разного типа может привести к неожиданным результатам.

При сравнении строки и числа JavaScript будет преобразовывать строку в числовое значение. Пустая строка преобразуется в 0. Не числовая строка преобразуется в значение NaN, которое всегда равно false.

Выражение Значение
2 < 12 true
2 < «12» true
2 < «John» false
2 > «John» false
2 == «John» false
«2» < «12» false
«2» > «12» true
«2» == «12» false

При сравнении двух строк значение строки «2» будет больше значения строки «12», потому что в алфавитной последовательности 1 меньше 2.

Чтобы обезопасить результаты сравнения, переменные следует привести к надлежащему типу:

Условия и принятия решений — Введение в программирование

Пока мы использовали свои программы, как навороченные калькуляторы. Конечно, они способны на большее и наша следующая важная задача заставить компьютеры принимать решения, основываясь на какой-то информации.

Смотрите, в математике есть концепция абсолютного значения. Оно определяется так:

Не беспокойтесь, это просто: если число положительное, то его абсолютное значение — это то же число; если число отрицательное, то его абсолютное значение — противоположное ему число. Проще говоря, отбросьте знак отрицания, если он есть, и всё.

Это можно представить в виде расстояния от нуля.

Допустим, вам требуется описать чёрный ящик — функцию, которая принимает число и возвращает его абсолютное значение. Вам потребуется создать правило внутри ящика, вроде этого:

Это условие и формально оно выглядит вот так:

Теперь давайте напишем настоящую функцию:

У этой функции один параметр — она принимает извне один аргумент. Затем идёт ключевое слово if , затем условие в скобках, затем — блок инструкций, который запускается, если аргумент отвечает условию. Следующее условие с else if . else if означает, что "если предыдущее условие не было удовлетворено, но это новое удовлетворено — перейти к выполнению следующего блока инструкций".

Таких блоков "else if" может быть несколько, иногда у вас есть множество альтернатив.

Теперь, когда мы разобрались с положительными и отрицательными числами, остался ещё один вариант: что, если у числа значение 0. Заметьте, мы не уточняем, что число явно 0, мы просто указываем else . Это значит "если ни одно из вышеуказанных условий не удовлетворяется, переходить к следующему блоку инструкций." Вы можете спокойно считать, что если число не положительное и не отрицательное, оно может быть только нулём. Но иногда мы совершаем ошибки, думая об условиях и альтернативах, а многие проблемы в программировании появляются из-за ошибочных условий.

Эти условия в скобках могут быть либо true (истина) либо false (ложь). Например, (num > 0) истинно, когда num равно 9 или 15, но ложно, если num имеет значение -18 или, скажем, 0.

Как вы видите математические знаки больше и меньше как бы отвечают ДА или НЕТ, ИСТИНА (true) или ЛОЖЬ (false). Есть другие выражения, которые дают ответы TRUE или FALSE:

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

Область математики, которая изучает значения true и false называется Алгеброй логики. В целом, утверждения любого типа, не только относящиеся к числам, могут быть истинными или ложными. Например, "Я человек" это истина, а "Китай находится в Южной Америке" — ложь.

В JavaScript есть значения true и false , и их можно использовать в условиях. Например, вы можете ввести if true , и это условие всегда будет удовлетворяться, потому что true всегда истинно.

В Алгебре логики множество аспектов и деталей, но в программировании мы в основном фокусируемся на трёх примитивных операциях: AND, OR, NOT.

AND используется, когда вам нужно, чтобы два условия были истиной. "Я человек AND лошади едят траву" — true, потому что оба утверждения истинны. "Я человек AND свиньи могут летать" — false, потому что одно утверждение истинно, а другое ложно, и вся конструкция в этом случае, объединённая операцией AND — ложна.

Символ для AND — двойной амперсанд && . Эта так называемая таблица истинности для операции AND — своеобразная шпаргалка:

A B A AND B
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

Так что только TRUE AND TRUE даёт TRUE, а все остальные комбинации содержат FALSE, поэтому их результат — FALSE.

OR используется, если вам нужно, чтобы хотя бы одно условие было true. Тот же пример, "Я человек OR лошади едят траву" — true. "Я человек OR свиньи могут летать" — тоже true. Хотя свиньи и не могут летать, я — человек, поэтому одно из этих двух утверждений — true, что делает всю конструкцию, объединённую OR, true.

Символ для OR — две вертикальных полоски || .

A B A OR B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

Если в конструкции присутствует true, значит результат true.

NOT — это просто — это противоположное. NOT true — это false, NOT false — это true. "NOT свиньи могут летать" — true, потому что "свиньи могут летать" — false, а не false — это true.

Символ для NOT — восклицательный знак ! .

A NOT A
TRUE FALSE
FALSE TRUE

В программировании обычно есть множество способов выполнения одной операции. Мы можем написать свою функцию абсолютного значения по-другому и получить тот же результат. Давайте попробуем это сделать, используя новые идеи:

Теперь у нас есть всего два условия:

  1. Если число имеет значение 0 ИЛИ число больше 0 , то возвращать само число.
  2. В любом другом случае возвращать -число.

Можно придумать ещё один способ записи той же функции, например, используя "больше чем или равно". Когда я говорю "та же функция", я имею в виду, что поведение и назначение функции точно такое же, но её внутренности — набор инструкций, из которых она состоит — могут отличаться.

Дополнение к уроку

Условия

Условие формально выглядит так:

JavaScript-функция, которая принимает значение и возвращает абсолютное значение:

Условие может быть либо истинным ( true ) либо ложным ( false ). Например, (num > 0) истинно, когда num равно 9 или 15, но ложно, когда num -18 или, скажем, 0.

То, что даёт ответ TRUE или FALSE, называется предикатом.

Математические предикаты в JavaScript:

Альтернативный способ реализации функции abs :

Можно придумать другой способ реализации той же функции, с использованием символа >= .

Та же функция значит: "назначение функции то же, но внутренность (реализация) может отличаться".

Тернарный оператор

В JavaScript и многих других языках есть сокращённая версия if: она называется тернарным оператором (ternary operator):

В этом случае есть только одно составное условие и два варианта: один для true и один для false.

Мы создаём absValue и присваиваем ему значение. Это значение зависит от условия: если условие истинно, тогда используется num , в противном случае используется -num .

Тернарная операция VS условная конструкция if

Между этими двумя элементами языка есть различия. Тернарная, или условная, операция вычисляет и возвращает значение, то есть является выражением. Это значит, что мы можем сохранить результат вычисления этого выражения в константе, например:

Условная конструкция if в JavaScript выражением НЕ является. Это инструкция — она выполняет действие, ничего не вычисляя и не возвращая. Как следствие, мы НЕ можем с помощью конструкции if сделать так же:

Такая строчка кода приведёт к ошибке. Кстати, в некоторых других языках, например в Ruby, if реализован как выражение, поэтому там подобное присваивание возможно.

Чтобы сделать то же самое, придётся "попотеть":

Как видно, код стал более громоздким и сложным. Более того, нам пришлось ввести изменяемое состояние — вместо константы const использовать переменную ( let ). То есть мы позволили всему остальному коду изменять значение absValue , хотя объективно это больше нигде не понадобится. Тем самым мы заложили потенциальную возможность для будущих ошибок.

Результат вычисления тернарной операции можно вернуть из функции, поставив её после инструкции return . Особенно хорошо она сочетается с функциями-однострочниками, когда надо вернуть то или иное значение в зависимости от логического условия:

Таким образом, тернарная операция позволяет писать более лаконичный и простой код. Но не стоит увлекаться, у неё есть свои минусы и ограничения по сравнению с конструкцией if , всё зависит от конкретной ситуации:

"Вложенные" тернарные операции выглядят эффектно, но ухудшают читабельность кода:

Тернарная операция не подойдёт, если в зависимости от условия надо выполнить несколько (а не одно выражение) строчек кода (блок кода). Нужна условная конструкция if :

Используя в теле функции, мы можем легко вернуть результат вычисления тернарника, поставив его после инструкции return . Ведь это обыкновенное выражение. Однако, инструкцию return нельзя использовать внутри тернарной операции. Интерпретатор вас не поймёт и выкинет ошибку:

Чем отличется команды true и false и для чего они в приграммировании

true и false — это значения, которые может принять переменная, объявленная как bool (логическая). По сути true и false эквивалентно да и нет. Но пишут true и false, потому что так принято.
Переменные типа bool используются зачастую в ветвлении if().
int a = 8, b = 9;
bool c = a != c; //Оператор != (не равно) возвращает в выражение bool значение, которое присваивается переменной c boll — типа
if(c) //if() проверяет значение переменной c, если оно = истине, то условие выполняется
cout << «Да, не равны» << endl;

Как я написал в этом примере, так не принято писать, я так написал, чтобы наглядней было. А пишут всегда так
int a = 8, b = 9;
if(a != c) //Оператор != (не равно) возвращает сразу в if() без промежуточной переменной true (истину), если a не равно c или false (ложь) если a равно b
cout << «Да, не равны» << endl;

What is Truthy and Falsy? How is it different from True and False?

I just learned there are truthy and falsy values in python which are different from the normal True and False .

Can someone please explain in depth what truthy and falsy values are? Where should I use them? What is the difference between truthy and True values and falsy and False values?

mkrieger1's user avatar

8 Answers 8

We use "truthy" and "falsy" to differentiate from the bool values True and False . A "truthy" value will satisfy the check performed by if or while statements. As explained in the documentation, all values are considered "truthy" except for the following, which are "falsy":

  • None
  • False
  • Numbers that are numerically equal to zero, including:
    • 0
    • 0.0
    • 0j
    • [] — an empty list
    • — an empty dict
    • () — an empty tuple
    • set() — an empty set
    • » — an empty str
    • b» — an empty bytes
    • bytearray(b») — an empty bytearray
    • memoryview(b») — an empty memoryview
    • an empty range , like range(0)
    • obj.__bool__() returns False
    • obj.__len__() returns 0 , given that obj.__bool__ is undefined

    wjandrea's user avatar

    Patrick Haugh's user avatar

    As the comments described, it just refers to values which are evaluated to True or False.

    For instance, to see if a list is not empty, instead of checking like this:

    You can simply do this:

    This is because some values, such as empty lists, are considered False when evaluated for a boolean value. Non-empty lists are True.

    Similarly for the integer 0, the empty string «», and so on, for False, and non-zero integers, non-empty strings, and so on, for True.

    The idea of terms like «truthy» and «falsy» simply refer to those values which are considered True in cases like those described above, and those which are considered False.

    For example, an empty list ( [] ) is considered «falsy», and a non-empty list (for example, [1] ) is considered «truthy».

    Python determines the truthiness by applying bool() to the type, which returns True or False which is used in an expression like if or while .

    Here is an example for a custom class Vector2d and it’s instance returning False when the magnitude (lenght of a vector) is 0, otherwise True .

    Note: If we wouldn’t have defined __bool__ it would always return True, as instances of a user-defined class are considered truthy by default.

    Example from the book: «Fluent in Python, clear, concise and effective programming»

    Truthy values refer to the objects used in a boolean context and not so much the boolean value that returns true or false.Take these as an example:

    Where should you use Truthy or Falsy values ? These are syntactic sugar, so you can always avoid them, but using them can make your code more readable and make you more efficient. Moreover, you will find them in many code examples, whether in python or not, because it is considered good practice.

    As mentioned in the other answers, you can use them in if tests and while loops. Here are two other examples in python 3 with default values combined with or , s being a string variable. You will extend to similar situations as well.

    with truthy it is more concise:

    In python 3.8, we can take advantage of the assignment expression :=

    with truthy it is shorter too

    or even shorter,

    Without the assignment expression, one can do

    but not shorter. Some people find the s =. line unsatisfactory because it corresponds to

    nevertheless you can adhere to this coding style if you feel comfortable with it.

    Any object in Python can be tested for its truth value. It can be used in an if or while condition or as operand of the Boolean operations.

    The following values are considered False :

    • None
    • False
    • zero of any numeric type, for example, 0, 0L, 0.0, 0j.
    • any empty sequence, for example, », (), [].
    • any empty mapping, for example, .
    • instances of user-defined classes, if the class defines a __nonzero__() or __len__() method, when that method returns the integer zero or bool value False .

    All other values are considered True — thus objects of many types are always true.

    Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated.

    In case of if (!id)

    !expr returns false if its single operand can be converted to true ; otherwise, returns true .

    If a value can be converted to true, the value is so-called truthy. If a value can be converted to false, the value is so-called falsy.

    Examples of expressions that can be converted to false are:

    Even though the ! operator can be used with operands that are not Boolean values, it can still be considered a boolean operator since its return value can always be converted to a boolean primitive. To explicitly convert its return value (or any expression in general) to the corresponding boolean value, use a double NOT operator or the Boolean constructor.

    While in case of if (id != null) it will only check if the value in id is not equal to null

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *