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- Визначає додаткові методи для прототипу булевих об'єктів.
