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
, а решта значень BigInt –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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 No | Edge No support No | Firefox No support 1 – 74 | 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 |