В чем разница между объектом Boolean и примитивным типом boolean в JavaScript?

В этом руководстве вы узнаете о 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:

ОператорbooleanBoolean
typeofлогическийобъект
instanceof Booleanfalsetrue

Рекомендуется использовать функцию Boolean() для преобразования значения другого типа в тип Boolean, но никогда не следует использовать Boolean в качестве объекта-оболочки примитивного логического значения.

В этом руководстве вы узнали о Boolean объекте JavaScript и различиях между Boolean объектом и boolean примитивным типом.

Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript