JS об'єкт Boolean
Примітиви Boolean та об'єкти Boolean
Булеві значення в JavaScript можна поділити на дві категорії: примітивні значення та об'єкти Boolean
. Примітивні булеві значення представлені двома константами: true
та false
. Вони є основними елементами логічного виразу та часто використовуються для контролю потоку в програмі.
З іншого боку, об'єкт Boolean
є обгорткою над примітивним булевим значенням і може бути створений за допомогою конструктора Boolean
. Важливо зрозуміти відмінність між цими двома типами булевих значень, особливо коли працюєте з умовними виразами. Не плутайте примітивні булеві значення true
та false
із значеннями true
та false
об'єкта Boolean
. Будь-який об'єкт, включаючи об'єкт Boolean
зі значенням false
, в умовному виразі оцінюється як true
. Наприклад:
const x = new Boolean(false);
if (x) {
// цей код виконується
}
Ця поведінка не стосується булевих примітивів. Наприклад:
const x = false;
if (x) {
// цей код не виконується
}
Не слід використовувати конструктор Boolean()
з new
для перетворення небулевого значення на булеве. Замість цього можна використовувати Boolean
як функцію або подвійний оператор NOT
:
const good = Boolean(expression); // рекомендується
const good2 = !!expression; // рекомендується
const bad = new Boolean(expression); // не рекомендується
Пам'ятайте, що якщо ви вказуєте будь-який об'єкт, включаючи об'єкт Boolean
зі значенням false
, як початкове значення об'єкта Boolean
, новий об'єкт Boolean
матиме значення true
:
const myFalse = new Boolean(false); // початкове значення false
const g = Boolean(myFalse); // початкове значення true
const myString = new String("Hello"); // рядковий об'єкт
const s = Boolean(myString); // початкове значення true
Приведення до типу Boolean
Процес приведення різних типів даних до булевого типу має свої особливості. Розберемо, як цей процес працює в мові JavaScript, і як різні значення можуть бути приведені до булевих:
Booleans
повертаються без змін.undefined
таnull
перетворюються наfalse
.- Числа
0
,-0
таNaN
перетворюються наfalse
; решта чисел наtrue
. 0n
перетворюється наfalse
; інші значенняBigInt
наtrue
.- Пустий рядок
""
стаєfalse
; всі інші рядки стаютьtrue
. Symbols
перетворюються наtrue
.- Всі об'єкти вважаються
true
.
З розгляду вищезазначеного стає зрозумілим, що в JavaScript лише невелика кількість значень може бути приведена до false
(так звані falsy значення). Всі інші значення називаються truthy. Подвійне заперечення, таке як !!x
, або функція Boolean(x)
використовують цей же алгоритм для перетворення x
в булевий тип.
Істина значення відіграє ключову роль при використанні з логічними операторами, умовними операторами, або в будь-якому булевому контексті. Важливо зазначити, що істина значення не є тим же самим, що і вільне порівняння з true
або false
.
if ([]) {
console.log("[] is truthy");
}
if ([] == false) {
console.log("[] == false");
}
// [] is truthy
// [] == false
Масив []
є істинним, але також вільно порівнюється з false
. Це відбувається тому, що всі об'єкти вважаються істинними в JavaScript. Проте при порівнянні з примітивом false
, []
також конвертується в примітивний рядок ""
завдяки методу Array.prototype.toString()
. При порівнянні рядків та булевих значень обидва перетворюються в числа, і обидва стають 0
, тому вираз [] == false
є істинним. Загалом, значення falsy
та == false
відрізняються в наступних випадках:
NaN
,undefined
, таnull
єfalsy
, але не вільно порівнюються зfalse
."0"
(та інші рядкові літерали, які не є""
, але конвертуються в0
) єtruthy
, але вільно порівнюються зfalse
.- Об'єкти завжди є
truthy
, але їх примітивне представлення може вільно порівнюватися зfalse
.
Зрозуміти, що значення truthy навряд чи можуть бути вільно порівнювані з true
, важливо для правильного розуміння логіки мови. Усі значення в JavaScript або truthy, або falsy, але більшість з них вільно не порівнюються ні з true
, ні з false
.
Порада: | Примітивні булеві значення ( |
Нотатка: | Важливо розуміти, що, на відміну від інших типів приведення, булеве приведення не перетворює об'єкти на примітиви. |
Нотатка: |
|
Синтаксис
var value = new Boolean(value);
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
1 |
1 |
3 |
3 |
12 |
Переглядач | ||||
---|---|---|---|---|
4.4 |
18 |
4 |
1 |
Переглядач | ||
---|---|---|
0.10.0 |
1.0 |
Приклади
Створення об'єктів булевого типу з початковим значенням false
.
const bNoParam = new Boolean();
const bZero = new Boolean(0);
const bNull = new Boolean(null);
const bEmptyString = new Boolean("");
const bfalse = new Boolean(false);
Створення об'єктів булевого типу з початковим значенням true
.
const btrue = new Boolean(true);
const btrueString = new Boolean("true");
const bfalseString = new Boolean("false");
const bRandString = new Boolean("Рядок тексту");
const bArrayProto = new Boolean([]);
const bObjProto = new Boolean({});
Методи
toString()
- Перетворює булеве значення у рядкове відображення.
constructor()
- Створює новий об'єкт типу Boolean.
valueOf()
- Повертає примітивне булеве значення об'єкта Boolean.
Властивості
prototype
- Визначає додаткові методи для прототипу булевих об'єктів.