Булевы переменные в javascript

Булев тип

На некоторые вопросы нужно отвечать только «да» или «нет». Булев тип как раз про это.

Кратко

Скопировать ссылку «Кратко» Скопировано

Логический или булев тип boolean может принимать лишь истинное ( true ) и ложное ( false ) значения. Назван он так в честь Джорджа Буля, одного из основателей математической логики.

Значения этого типа используются в условных выражениях.

Как пишется

Скопировать ссылку «Как пишется» Скопировано

Создать булево значение можно несколькими способами.

Первый — явно указать значение, используя ключевые слова true и false :

 const truthyValue = true // «Истина»const falsyValue = false // «Ложь» const truthyValue = true // «Истина» const falsyValue = false // «Ложь»      

Второй способ — использовать метод Boolean :

 const truthyValue = Boolean(1) // «Истина»const falsyValue = Boolean('') // «Ложь» const truthyValue = Boolean(1) // «Истина» const falsyValue = Boolean('') // «Ложь»      

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

Третий способ — использовать выражения, значениями которых будут «истина» или «ложь» (мы поговорим о таких выражениях подробнее ниже).

Следующие два выражения истинны, потому что 4 действительно меньше 5.

 const truthyValue = Boolean(4 < 5)const anotherTruthy = 4 < 5console.log(truthyValue)// trueconsole.log(anotherTruthy)// true const truthyValue = Boolean(4  5) const anotherTruthy = 4  5 console.log(truthyValue) // true console.log(anotherTruthy) // true      

Следующие два — ложны, потому что 2 * 2 === 4:

 const falsyValue = Boolean(2 * 2 === 5)const anotherFalsy = 2 * 2 === 5 console.log(falsyValue)// falseconsole.log(anotherFalsy)// false const falsyValue = Boolean(2 * 2 === 5) const anotherFalsy = 2 * 2 === 5 console.log(falsyValue) // false console.log(anotherFalsy) // false      

Булевы значения можно использовать в условных выражениях.

 const isCorrect = trueif (isCorrect)  // Выполнится эта ветка кода, // потому что оператор if проверяет, // истинно ли выражение в скобках, // и если да, то выполняет этот код.> else  // Эта ветка не выполнится.> const isWrong = falseif (isWrong)  // Теперь не выполнится эта ветка, // потому что выражение в скобках ложно.> else  // А вот эта — выполнится.> const isCorrect = true if (isCorrect)  // Выполнится эта ветка кода, // потому что оператор if проверяет, // истинно ли выражение в скобках, // и если да, то выполняет этот код. > else  // Эта ветка не выполнится. > const isWrong = false if (isWrong)  // Теперь не выполнится эта ветка, // потому что выражение в скобках ложно. > else  // А вот эта — выполнится. >      

Как понять

Скопировать ссылку «Как понять» Скопировано

Логические значения можно воспринимать как ответ на закрытый вопрос — «Да или нет?»

Это понимание позволяет придумывать более подходящие названия для булевых переменных.

Плохое название для логического значения не помогает понять, на какой вопрос отвечает переменная. Например, wait Response — не очень хорошее название.

А вот переменная с именем should Wait For Response отвечает на более чёткий вопрос «Должен ли процесс подождать ответа за запрос?». А переменная is Waiting For Response — на вопрос «Ждёт ли процесс ответа прямо сейчас?»

Обычно логическим переменным дают названия, начинающиеся с английских глаголов is, should, does, can и подобных.

Выражения

Скопировать ссылку «Выражения» Скопировано

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

Булевым выражением в JavaScript может быть что угодно.

Хитрость в том, чтобы знать, какое выражение в какое значение в итоге будет преобразовано. Например, все эти выражения трансформируются в false :

 const falsy1 = Boolean(), falsy2 = Boolean(0), falsy3 = Boolean(null), falsy4 = Boolean(''), falsy5 = Boolean(false) const falsy1 = Boolean(), falsy2 = Boolean(0), falsy3 = Boolean(null), falsy4 = Boolean(''), falsy5 = Boolean(false)      
 const truthy1 = Boolean(true), truthy2 = Boolean('true'), truthy3 = Boolean('false'), truthy4 = Boolean('Су Лин'), truthy5 = Boolean([]), truthy6 = Boolean(<>) const truthy1 = Boolean(true), truthy2 = Boolean('true'), truthy3 = Boolean('false'), truthy4 = Boolean('Су Лин'), truthy5 = Boolean([]), truthy6 = Boolean(>)      

Обратите внимание, что строка ‘false’ преобразуется в логическое true . Так происходит потому, что непустая строка в JavaScript считается truthy значением — то есть таким, которое приводится к true .

То же и с пустыми массивом [ ] и объектом <> . Они считаются truthy значениями, поэтому приводятся к true .

Обратите внимание на списки truthy и falsy значений в JavaScript.

Сравнить строку с числом

Скопировать ссылку «Сравнить строку с числом» Скопировано

В JavaScript интерпретатор может сам приводить типы, из-за чего мы можем сравнивать разные типы данных друг с другом.

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

 5 > '4'// true5 > '4 '// true5 > ' 4 '// true5 > '4.'// true 5 > '4' // true 5 > '4 ' // true 5 > ' 4 ' // true 5 > '4.' // true      
 5 > '4 .'// false 5 > '4 .' // false      

Дело в том, что JavaScript попытается преобразовать строку в число. Если это получается, то мы сравниваем числа 5 и 4, а если нет, то 5 и NaN (число, любое сравнение с которым всегда false ).

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

Отрицание

Скопировать ссылку «Отрицание» Скопировано

Чтобы инвертировать значение логического типа, можно использовать логическое отрицание. Логическое отрицание в JS записывается через унарный оператор ! :

 const truthy = trueconst falsy = !truthy console.log(falsy)// false const truthy = true const falsy = !truthy console.log(falsy) // false      

Оно также используется, чтобы проверять обратные условия. Функция go To Bed выполнится, если is Sleeping = = = false .

 const isSleeping = false if (!isSleeping)  goToBed()> const isSleeping = false if (!isSleeping)  goToBed() >      

На практике

Скопировать ссылку «На практике» Скопировано

Саша Беспоясов советует

Скопировать ссылку «Саша Беспоясов советует» Скопировано

🛠 Если вызвать двойное отрицание, можно быстро привести любое выражение к логическому типу.

 const sum = 2 + 2const truthy = !!sum console.log(truthy)// true const sum = 2 + 2 const truthy = !!sum console.log(truthy) // true      
  1. Первое отрицание приводит значение к отрицательному логическому значению !sum — > false ;
  2. Второе отрицание инвертирует значение !false — > true ;

Источник

Boolean

The Boolean object represents a truth value: true or false .

Description

Boolean primitives and Boolean objects

Do not confuse the primitive Boolean values true and false with the true and false values of the Boolean object.

Any object, including a Boolean object whose value is false , evaluates to true when passed to a conditional statement. For example, the condition in the following if statement evaluates to true :

const x = new Boolean(false); if (x)  // this code is executed > 

This behavior does not apply to Boolean primitives. For example, the condition in the following if statement evaluates to false :

const x = false; if (x)  // this code is not executed > 

Do not use the Boolean() constructor with new to convert a non-boolean value to a boolean value — use Boolean as a function or a double NOT instead:

const good = Boolean(expression); // use this const good2 = !!expression; // or this const bad = new Boolean(expression); // don't use this! 

If you specify any object, including a Boolean object whose value is false , as the initial value of a Boolean object, the new Boolean object has a value of true .

const myFalse = new Boolean(false); // initial value of false const g = Boolean(myFalse); // initial value of true const myString = new String("Hello"); // string object const s = Boolean(myString); // initial value of true 

Warning: You should rarely find yourself using Boolean as a constructor.

Boolean coercion

Many built-in operations that expect booleans first coerce their arguments to booleans. The operation can be summarized as follows:

  • Booleans are returned as-is.
  • undefined turns into false .
  • null turns into false .
  • 0 , -0 , and NaN turn into false ; other numbers turn into true .
  • 0n turns into false ; other BigInts turn into true .
  • The empty string «» turns into false ; other strings turn into true .
  • Symbols turn into true .
  • All objects become true .

Note: A legacy behavior makes document.all return false when used as a boolean, despite it being an object. This property is legacy and non-standard and should not be used.

Note: Unlike other type conversions like string coercion or number coercion, boolean coercion does not attempt to convert objects to primitives.

In other words, there are only a handful of values that get coerced to false — these are called falsy values. All other values are called truthy values. A value’s truthiness is important when used with logical operators, conditional statements, or any boolean context.

There are two ways to achieve the same effect in JavaScript.

  • Double NOT: !!x negates x twice, which converts x to a boolean using the same algorithm as above.
  • The Boolean() function: Boolean(x) uses the same algorithm as above to convert x .

Note that truthiness is not the same as being loosely equal to true or false .

if ([])  console.log("[] is truthy"); > if ([] == false)  console.log("[] == false"); > // [] is truthy // [] == false 
[] is truthy, but it’s also loosely equal to false . It’s truthy, because all objects are truthy. However, when comparing with false , which is a primitive, [] is also converted to a primitive, which is «» via Array.prototype.toString() . Comparing strings and booleans results in both being converted to numbers, and they both become 0 , so [] == false is true . In general, falsiness and == false differ in the following cases:

  • NaN , undefined , and null are falsy but not loosely equal to false .
  • «0» (and other string literals that are not «» but get coerced to 0) is truthy but loosely equal to false .
  • Objects are always truthy, but their primitive representation may be loosely equal to false .

Truthy values are even more unlikely to be loosely equal to true . All values are either truthy or falsy, but most values are loosely equal to neither true nor false .

Constructor

Creates a new Boolean object.

Instance properties

These properties are defined on Boolean.prototype and shared by all Boolean instances.

The constructor function that created the instance object. For Boolean instances, the initial value is the Boolean constructor.

Instance methods

Returns a string of either true or false depending upon the value of the object. Overrides the Object.prototype.toString() method.

Returns the primitive value of the Boolean object. Overrides the Object.prototype.valueOf() method.

Examples

Creating Boolean objects with an initial value of false

const bNoParam = new Boolean(); const bZero = new Boolean(0); const bNull = new Boolean(null); const bEmptyString = new Boolean(""); const bfalse = new Boolean(false); 

Creating Boolean objects with an initial value of true

const btrue = new Boolean(true); const btrueString = new Boolean("true"); const bfalseString = new Boolean("false"); const bSuLin = new Boolean("Su Lin"); const bArrayProto = new Boolean([]); const bObjProto = new Boolean(>); 

Specifications

Browser compatibility

BCD tables only load in the browser

See also

Found a content problem with this page?

This page was last modified on Jun 25, 2023 by MDN contributors.

Your blueprint for a better internet.

Источник

Читайте также:  Python sys stdout encoding
Оцените статью