Встроенные оболочки объектов (созданные с помощью конструкторов Boolean
, Number
, String
и Date
) хранят примитивное упакованное значение во внутреннем свойстве с именем [[PrimitiveValue]]
, которое нельзя изменить, но. ..
Вы можете переопределить метод valueOf
вашего test
объекта:
var test = new Boolean(0);
test.prop = "OK!"
// override valueOf:
test.valueOf = function () { return true; };
if (test == true) { // using the equals operator explicitly for type conversion
alert(test.prop); //"OK!"
}
Это будет работать, поскольку метод valueOf
используется внутри механизма преобразования типов, запускаемого оператором equals.
Когда один из операндов является логическим значением, оба в конце преобразуются в Число.
Если мы не используем оператор равенства (например, if (test) { ... }
), поскольку test
является объектом, при преобразовании непосредственно в логическое значение он всегда будет давать true
.
Любой объект, преобразованный в логическое значение, выдаст значение true
, единственными значениями, которые могут дать результат false
, являются значения "falsey" (null
, undefined
, 0
, NaN
, пустая строка и, конечно, значение false
), все остальное выдаст true
.
Дополнительная информация: