Boolean
Значення Boolean
(булеві) можуть мати одне з двох значень: true
(істина) або false
(хиба), що представляють значення істинності логічного твердження.
Опис
Значення Boolean зазвичай повертаються операторами відношення, операторами рівності та логічним НЕ (!
). Також вони можуть повертатися функціями, що представляють умови, наприклад, Array.isArray()
. Зверніть увагу на те, що бінарні логічні оператори, серед яких &&
і ||
, повертають значення операндів, що можуть бути булевими значеннями, але можуть і не бути.
Булеві значення здебільшого використовуються в перевірці умов, наприклад, умовах інструкцій if...else
і while
, умовному операторі (? :
) та поверненому значенні предиката Array.prototype.filter()
.
Рідко трапляється необхідність явно перетворювати щось на булеве значення, адже JavaScript у булевих контекстах робить це автоматично, тож можна користуватися будь-яким значенням так, ніби воно булеве, послуговуючись його істинністю. Також заохочується використання у власному коді if (condition)
і if (!condition)
замість if (condition === true)
і if (condition === false)
, щоб послуговуватися користю від такої поведінки. Однак пересвідчення в тому, що значення умов завжди є булевими, допоможе краще роз'яснити призначення коду.
// Робіть так:
// Це завжди повертає булеве значення
const isObject = (obj) => !!obj && typeof obj === "object";
// Або так:
const isObject = (obj) => Boolean(obj) && typeof obj === "object";
// Або так:
const isObject = (obj) => obj !== null && typeof obj === "object";
// А не так:
// Це може повернути хибні значення, що не дорівнюють false
const isObject = (obj) => obj && typeof obj === "object";
Булеві примітиви та об'єкти Boolean
Для перетворення небулевих значень на булеві слід користуватися Boolean
як функцією або оператором подвійного НЕ. Не слід використовувати конструктор Boolean()
з new
.
const good = Boolean(expression);
const good2 = !!expression;
const bad = new Boolean(expression); // не користуйтеся цим!
Це пов'язано з тим, що всі об'єкти, включно з об'єктом Boolean
, у який загорнуто значення false
, є істинними і в умовних інструкціях обчислюються як true
. (Див. також розділ зведення до булевого нижче.)
if (new Boolean(true)) {
console.log("Це виведення – друкується.");
}
if (new Boolean(false)) {
console.log("Це виведення – ТАКОЖ друкується.");
}
const myFalse = new Boolean(false); // myFalse – це об'єкт Boolean (а не примітивне значення false)
const g = Boolean(myFalse); // g дорівнює true
const myString = new String("Привіт"); // myString – це об'єкт String
const s = Boolean(myString); // s дорівнює true
[!WARNING] Використовувати
Boolean
як конструктор повинно доводитись нечасто.
Зведення до булевого
Чимало вбудованих операцій, що очікують на булеві значення, зводять свої аргументи до булевих. Ця операція може бути підсумована отак:
- Булеві значення повертаються як є.
undefined
стаєfalse
.null
стаєfalse
.0
,-0
іNaN
стаютьfalse
, а решта чисел –true
.0n
стаєfalse
, а решта значень BigInt –true
.- Порожній рядок
""
стаєfalse
, а інші рядки –true
. - Символи стають
true
. - Усі об'єкти – стають
true
.
[!NOTE] Історична логіка змушує
document.all
повертатиfalse
, коли вживається як булеве значення, всупереч тому, що це об'єкт. Ця властивість є історичною та нестандартною, її не варто використовувати.
[!NOTE] На відміну від інших перетворень типів, як то зведення до рядка чи зведення до числа, зведення до булевого не намагається перетворювати об'єкти на примітиви шляхом виклику користувацьких методів.
Інакше кажучи, є вельми невелика кількість значень, що зводяться до 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.
Властивості примірника
Ці властивості означені на Boolean.prototype
і є спільними для всіх примірників Boolean
.
Boolean.prototype.constructor
Функція-конструктор, що створила об'єкт-примірник. Для примірників
Boolean
початковим значенням є конструкторBoolean
.
Методи примірника
Boolean.prototype.toString()
Повертає рядок – або
true
, абоfalse
, залежно від значення об'єкта. Заміщує методObject.prototype.toString()
.Boolean.prototype.valueOf()
Повертає примітивне значення об'єкта
Boolean
. Заміщує методObject.prototype.valueOf()
.
Приклади
Створення хибних значень
const bNoParam = Boolean();
const bZero = Boolean(0);
const bNull = Boolean(null);
const bEmptyString = Boolean("");
const bfalse = Boolean(false);
Створення істинних значень
const btrue = Boolean(true);
const btrueString = Boolean("true");
const bfalseString = Boolean("false");
const bSuLin = Boolean("Su Lin");
const bArrayProto = Boolean([]);
const bObjProto = Boolean({});
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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
|
Chrome No support Ні | Edge No support Ні | Firefox No support 1 – 74 | Internet Explorer No support Ні | Opera No support Ні | Safari No support Ні | WebView Android No support Ні | Chrome Android No support Ні | Firefox for Android Full support 4 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet No support Ні | Deno No support Ні | Node.js No support Ні |
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 |
Дивіться також
- Булеве значення
- Булеві примітиви
- Логічний тип даних на Вікіпедії