В этом руководстве вы узнаете о Boolean
объекте JavaScript и различиях между объектом Boolean
и примитивным типом boolean
.
Примитивный тип boolean
JavaScript предоставляет логический примитивный тип, который имеет два значения true
и false
. В следующем примере объявляются две переменные, которые содержат логические значения false
и true
:
let isPending = false; let isDone = true;
Когда вы применяете оператор typeof
к переменной, которая содержит примитивное логическое значение, вы получаете boolean
значение, как показано в следующем примере:
console.log(typeof(isPending)); // boolean console.log(typeof(isDone)); // boolean
Boolean объект JavaScript
В дополнение к boolean
примитивному типу JavaScript также предоставляет вам глобальную функцию Boolean()
с буквой B
в верхнем регистре для приведения значения другого типа к boolean.
В следующем примере показано, как использовать функцию Boolean()
для преобразования строки в логическое значение. Поскольку строка не пуста, она возвращает true
.
let a = Boolean('Hi'); console.log(a); // true console.log(typeof(a)); // boolean
Boolean
также является объектом-оболочкой boolean
примитивного типа. Это означает, что когда вы передаете Boolean
конструктору значение true
или false
, он создает Boolean
объект. Например:
let b = new Boolean(false);
Чтобы вернуть примитивное значение, вы вызываете метод valueOf()
Boolean
объекта следующим образом:
console.log(b.valueOf()); // false
Однако, если вы вызываете метод toString()
Boolean
объекта, вы получаете строковое значение "true"
или "false"
. Например:
console.log(b.toString()); // "false"
Различия boolean и Boolean в JavaScript
Рассмотрим этот пример:
let completed = true; let active = new Boolean(false);
Во-первых, active
— это объект, поэтому вы можете добавить к нему свойство:
active.primitiveValue = active.valueOf(); console.log(active.primitiveValue); // false
Однако вы не можете сделать это с примитивной логической переменной, такой как completed
переменная:
completed.name = 'primitive'; console.log(completed.name); // undefined
Во-вторых, typeof
логического объекта возвращает object
, тогда как typeof
примитивного логического значения возвращает boolean
.
console.log(typeof completed); // boolean console.log(typeof active); // object
В-третьих, при применении оператора instanceof
к Boolean
объекту он возвращает true
. Однако он возвращает false
, если вы применяете оператор instanceof
к логическому значению.
console.log(completed instanceof Boolean); // false console.log(active instanceof Boolean); // true
Хорошей практикой является никогда не использовать Boolean
объект, потому что это создаст много путаницы, особенно при использовании в выражении. Например:
let falseObj = new Boolean(false); if(falseObj) { console.log('weird part of the Boolean object'); }
Как работает скрипт.
- Во-первых, создайте
falseObj
как оболочкуBoolean
объекта для значенияfalse
. - Во-вторых, используйте
falseObj
в оператореif
. Потому чтоfalseObj
— это объект, и движок JavaScript принуждает его к логическому значениюtrue
. В результате выполняется оператор внутри блокаif
.
В следующей таблице приведены различия между Boolean
и boolean
в JavaScript:
Оператор | boolean | Boolean |
---|---|---|
typeof | логический | объект |
instanceof Boolean | false | true |
Рекомендуется использовать функцию Boolean()
для преобразования значения другого типа в тип Boolean, но никогда не следует использовать Boolean
в качестве объекта-оболочки примитивного логического значения.
В этом руководстве вы узнали о Boolean
объекте JavaScript и различиях между Boolean
объектом и boolean
примитивным типом.