incorporado envoltorios de objetos (creados con las Boolean
, Number
, String
y Date
constuctors) almacenar la primitiva valor envuelto en una propiedad interna llamada [[PrimitiveValue]]
, que no puede ser cambiado, pero ...
Usted puede anular el método valueOf
de su objeto 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!"
}
Funcionará ya que el método valueOf
se usa internamente por los mecanismos de conversión de tipo activados por el operador igual.
Cuando uno de los operandos es un valor booleano, ambos se convierten al final en Número.
Si no utilizamos el operador equals (por ejemplo if (test) { ... }
), ya que test
es un objeto, cuando se convierte directamente a Boolean, será siempre producen true
.
Cualquier objeto convertida a Boolean producirá el valor true
, los únicos valores que puede producir un resultado false
, son los valores "Falsey" (null
, undefined
, 0
, NaN
, una cadena vacía, y por supuesto el valor false
), cualquier otra cosa producirá true
.
Más información:
aunque la representación de cadena se mantiene a 'false', ya que el valor subyacente no ha cambiado realmente .. –
@Gaby, bueno, depende de cómo se hace la conversión de tipos, por ejemplo, si usted concatena una cadena, por ejemplo 'test + ''' el resultado seguirá siendo ''true'' (' valueOf' se usará primero), si usa el constructor' String' como una función, p. ej .: 'String (test);' llamará al ['Boolean.prototype.toString'] (http://ecma262-5.com/ELS5_HTML.htm#Section_15.6.4.2) método. Estoy de acuerdo, es una buena idea anular 'toString' también. – CMS
ah muy bien ... acabo de alertar el valor 'alerta (prueba)' y mostró 'falso'. Parece que el método 'alert' utiliza el constructor String o llama' toString' a sus argumentos ... gracias por el aviso. –