intégré dans des emballages d'objets (créé avec les Boolean
, Number
, String
et Date
constuctors) stocker la primitive valeur enveloppé dans une propriété interne nommée [[PrimitiveValue]]
, qui ne peut être changé, mais ...
Vous pouvez remplacer la méthode valueOf
de votre objet 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!"
}
Cela fonctionnera puisque la méthode valueOf
est utilisée en interne par les mécanismes de conversion de type déclenchés par l'opérateur égal. Lorsque l'un des opérandes est une valeur booléenne, les deux sont convertis à la fin en Nombre.
Si nous n'utilisons l'opérateur equals (par exemple if (test) { ... }
), puisque test
est un objet, il sera toujours lorsqu'il est converti directement à Boolean rendement true
.
Tout objet converti en Boolean produira la valeur true
, les seules valeurs qui peuvent produire un résultat false
, sont les valeurs « Falsey » (null
, undefined
, 0
, NaN
, une chaîne vide, et bien sûr la valeur false
), toute autre chose produira true
.
Plus d'infos:
bien que la représentation de la chaîne reste à 'false', puisque la valeur sous-jacente n'a pas vraiment changé .. –
@Gaby, eh bien, cela dépend de la façon dont est fait la conversion de type, par exemple, si vous lui concaténez une chaîne, par exemple 'test + ''' le résultat sera toujours '' true'' ('valueOf' sera utilisé en premier), si vous utilisez le constructeur' String' en tant que fonction, par exemple: 'String (test); Méthode [Boolean.prototype.toString] (http://ecma262-5.com/ELS5_HTML.htm#Section_15.6.4.2). Je suis d'accord, c'est une bonne idée de surcharger 'toString' aussi. – CMS
ah très gentil .. je viens d'alerter la valeur 'alert (test)' et il a montré 'false'. On dirait que la méthode 'alert' utilise le constructeur String ou appelle' toString' sur ses arguments .. merci pour les heads up. –