Ответ 1
Булевы объекты - это просто объекты и, следовательно, являются правдивыми.
console.log(!!new Boolean(true)); // true
console.log(!!new Boolean(false)); // true
Учитывая, что в JavaScript
console.log("var F=new Boolean(false)")
console.log("( F != (F==false))",(( F != (F==false)) ? "TRUE" : "false"));
console.log("(!F != (F==false))",((!F != (F==false)) ? "TRUE" : "false"));
печатает:
( F != (F==false)) TRUE
(!F != (F==false)) TRUE
что означает, что булевы объекты не являются dop-in заменяет булевский примитив в типичных условиях, таких как:
if(someBoolean) ... // always true
if(!someBoolean) ... // always false
И что коллекции JavaScript Set
и Map
допускают любой тип, включая примитивы.
В чем используются булевы объекты, в частности; и объекты, представляющие другие примитивные типы в целом, так как они имеют всевозможные странности в связанных с ними связях?
Примечание. Я специально спрашиваю , какие используются прецеденты (если есть), а не , как они отличаются от их примитивных копий.
Булевы объекты - это просто объекты и, следовательно, являются правдивыми.
console.log(!!new Boolean(true)); // true
console.log(!!new Boolean(false)); // true
Скажем, у нас есть...
var F = new Boolean();
var f = false;
Где F - объект, а f - примитив .
Объекты передаются по ссылке. Примитивы передаются по значению.
Каким бы ни был тип объекта, он всегда сохраняет свою индивидуальность; идентичность. Он ведет себя как реальный (материальный) объект, беря свое собственное уникальное пространство во Вселенной.
Поэтому...
var Fn = new Boolean();
не является "равным" F, даже если сравнивать с оператором динамического типа "==", хотя они одинакового типа и имеют одно и то же значение:
Fn == F;
>> false
Это потому, что (как уже подчеркивалось), это два отдельных и разных объекта, которые несут элементы того же значения, т.е. false. Это, тем не менее, не то же самое false.
И потому, что нет преобразования типов (поскольку они уже одного типа уже), они будут сравниваться по ссылке - которые, очевидно, указывают на два отдельных объекта, означает: они не совпадают объект!
Мы должны представить наши объекты JavaScript данного типа в виде пакетов, специально предназначенных для переноса определенного типа ценностей. Этот способ мышления значительно облегчит понимание даже самых неожиданных результатов нашей работы. И вот почему null красив.
Пример использования практического значения (было бы), что определенный логический объект может нести оба значения, но оставаться тем же (идентифицируемым) объектом. Увы, объект Boolean оставлен в исходном состоянии ввода в JavaScript-разработке. И теперь практически бесполезен и может быть использован только для определения того, что это ложное: истинное значение происходит от другого процесса и возврата, чем тот, который вы его тоже сравниваете.
С уважением.