Boolean

Об'єкт Boolean (булів) представляє логічне значення: true (істину) або false (хибу).

Опис

Булеві примітиви та об'єкти Boolean

Не слід плутати примітивні значення Boolean, true та false, зі значеннями true та false об'єкта Boolean.

Будь-який об'єкт, в тому числі об'єкт Boolean, чиє значення – false, обчислюється до true, бувши переданим до умовної інструкції. Наприклад, умова в наступній інструкції if спрацює як true:

const x = new Boolean(false);
if (x) {
  // цей код виконується
}

Така логіка не застосовується до примітивів Boolean. Наприклад, умова у наступній інструкції if – спрацьовує як false:

const x = false;
if (x) {
  // цей код не виконується
}

Не слід використовувати конструктор Boolean() із new для перетворення небулевого значення на булеве – натомість слід використовувати Boolean як функцію або подвійне НЕ:

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("Привіт"); // рядковий об'єкт
const s = Boolean(myString); // початкове значення – true

Застереження: Використовувати Boolean як конструктор повинно доводитись нечасто.

Зведення до булевого

Чимало вбудованих операцій, що очікують на булеві значення, зводять свої аргументи до булевих. Ця операція може бути підсумована отак:

  • Булеві значення повертаються як є.
  • undefined стає false.
  • null стає false.
  • 0, -0 і NaN стають false, а решта чисел – true.
  • 0n стає false, а решта значень BigInttrue.
  • Порожній рядок "" стає false, а інші рядки – true.
  • Символи стають true.
  • Усі об'єкти – стають true.

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

Примітка: На відміну від інших перетворень типів, як то зведення до рядка чи зведення до числа, зведення до булевого не намагається перетворювати об'єкти на примітиви.

Інакше кажучи, є вельми невелика кількість значень, що зводяться до false, — вони звуться хибними значеннями. Всі решта – звуться істинними значеннями. Істинність значення – важлива, коли воно використовується з логічними операторами, умовними інструкціями або будь-яким булевим контекстом.

Є два способи досягнути в JavaScript такого ж ефекту.

  • Подвійне НЕ: !!x двічі заперечує x, що перетворює x на булеве значення, використовуючи той же алгоритм, що описано вище.
  • Функція Boolean(): Boolean(x) використовує для перетворення x той же алгоритм, описаний вище.

Зверніть увагу на те, що істинність – не те саме, що нестрога рівність щодо true або false.

if ([]) {
  console.log("[] – істинне значення");
}
if ([] == false) {
  console.log("[] == false");
}
// [] – істинне значення
// [] == false

[] – істинне значення, але також воно нестрого рівно false. Воно істинне, тому що всі об'єкти – істинні. Проте як порівняти з false, що є примітивом, [] також перетворюється на примітив, тобто на "" – за допомогою Array.prototype.toString(). Порівняння рядків і булевих значень призводить до того, що обидві сторони перетворюються на числа, і обидва ці значення стають 0, тож [] == false обчислюється як true. Загалом, хибність і == false – відрізняються у наступних випадках:

  • NaN, undefined і null – хибні, але нестрого не дорівнюють false.
  • "0" (та інші рядкові літерали, окрім "", що зводяться до 0), – істинні, але нестрого рівні false.
  • Об'єкти – завжди істинні, але їхнє примітивне представлення може нестрого дорівнювати false.

Істинні значення мають навіть меншу ймовірність нестрого дорівнювати true. Усі значення є або істинними, або хибними, але більшість значень не є нестрого рівними ані true, ані false.

Конструктор

Boolean()

Створює новий об'єкт Boolean.

Властивості примірника

Ці властивості означені на Boolean.prototype і є спільними для всіх примірників Boolean.

Boolean.prototype.constructor

Функція-конструктор, що створила об'єкт-примірник. Для примірників Boolean початковим значенням є конструктор Boolean.

Методи примірника

Boolean.prototype.toString()

Повертає рядок – або true, або false, залежно від значення об'єкта. Заміщує метод Object.prototype.toString().

Boolean.prototype.valueOf()

Повертає примітивне значення об'єкта Boolean. Заміщує методObject.prototype.valueOf().

Приклади

Створення об'єктів Boolean з початковим значенням false

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

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

Специфікації

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
Boolean
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
Boolean() constructor Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 4
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
toSource
Non-standard
Chrome No support No
Edge No support No
Firefox No support 1 –  74
footnote
Internet Explorer No support No
Opera No support No
Safari No support No
WebView Android No support No
Chrome Android No support No
Firefox for Android Full support 4
Opera Android No support No
Safari on iOS No support No
Samsung Internet No support No
Deno No support No
Node.js No support No
toString Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 4
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
valueOf Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 4
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0

Дивіться також