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
автор: Bond

Приведення до типу 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.

автор: Bond

Порада

Примітивні булеві значення (true та false) зазвичай є більш зручними та зрозумілими у використанні, особливо для початківців.

автор: Bond
Нотатка

Важливо розуміти, що, на відміну від інших типів приведення, булеве приведення не перетворює об'єкти на примітиви.

автор: Bond
Нотатка

document.all повертає false, коли використовується як булеве значення, незважаючи на те, що це об'єкт. Ця властивість є застарілою і її не слід використовувати.

автор: Bond

Синтаксис

var value = new Boolean(value);

методи

Метод Опис
toString Перетворює булеве значення у рядкове відображення.
valueOf Повертає примітивне булеве значення об'єкта Boolean.
constructor Створює новий об'єкт типу Boolean.

властивості

Властивість Опис
prototype Визначає додаткові методи для прототипу булевих об'єктів.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 3 3 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
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);
автор: Bond

Створення об'єктів булевого типу з початковим значенням 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({});
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід