Quel est le but de new Boolean() en Javascript?
Qu'est-ce que l'utilisation de:
var flag = new Boolean(false);
par rapport à:
var flag = false;
Quand souhaitez-vous réellement utiliser new Boolean
?
- Voir aussi Quel est le point de l'Objet Booléen?
Vous devez vous connecter pour publier un commentaire.
De la fonction globale
Boolean()
peut être utilisé pour la conversion de type lorsqu'il est appelé sansnew
, par exemple,Lorsqu'il est appelé avec
new
, un objet wrapper seront créés en outre, ce qui signifie que vous pouvez assigner des propriétés de l'objet:Ce n'est pas possible avec des valeurs primitives comme primitives ne peuvent pas tenir propriétés:
L'attribution d'une propriété à une primitive de ne pas produire une erreur à cause de l'auto-boxing, c'est à dire
sera interprété comme
Pour obtenir la valeur primitive de retour, vous aurez pour appeler le
valueOf()
méthode. Cette opération est nécessaire si vous souhaitez utiliser le enveloppés de la valeur, car les objets d'évaluer àtrue
booléennes contextes - même si le enveloppés valeur estfalse
.Je n'ai jamais rencontré une application utile d'être en mesure d'attribuer des propriétés à valeurs booléennes, mais la boxe pourrait être utile dans les cas où une référence à une valeur primitive est nécessaire.
valueOf
--il sera automatiquement appelée lors de la primitive est nécessaire. Par exemple,boolean_object === true
forcera l'objet de son sous-jacent primitive (mais!boolean_object
ne va pas).new Boolean(true) === true
est fauxboolean_object == true
(deux signes égal, et non pas trois) VA forcer (je suis sûr que, juste testé).new Boolean(false) == false
retour à Javascript, la comparaison réalisée estNumber(new Boolean(false).valueOf()) === Number(false)
; l'algorithme a quelques intéressantes conséquences, par exemple,new Number(0) == false
même siBoolean(new Number(0)) === true
bool = new Boolean(bool); bool.ogg = ...; bool.h264 = ...; bool.webm = ...;
Tandis que d'autres ont mentionné la théorie, permettez-moi de parler de la partie pratique:
Parce que
Boolean
des objets (comme des objets en général) sont toujours truthy, il est considéré comme une mauvaise pratique à utiliser. Dans de nombreuses années de JS programmation, je n'ai jamais utilisé, et je ne me souviens pas de voirBoolean
s dans d'autres peuples code. Même pas une fois.À l'aide de primitives valeurs d'éviter la confusion et à faire de votre code un peu plus courte.
Si jamais vous avez besoin d'un bool enveloppé dans un objet, vous pourriez aussi bien utiliser un
Object
objet comme suit:Aussi, l'appel de la
Boolean()
constructeur comme une fonction (comme dansfoo = Boolean(bar)
) a le même effet qu'explicite typecasting à l'aide de!!
, et le dernier est généralement privilégié par rapport à l'ancien.!!
. Mais le but et l'effet de!!
semble moins évident que le classiqueBoolean()
convertisseur, et je me demande si le code de clarté est une préoccupation ici.new
ce qui résulte en uneBoolean
Objet. Puis, à chaque fois que vous aurez à utiliserfoo.valueOf()
dans des conditions. Au lieu de cela viens de l'appelerBoolean
comme une fonction qui conduit à une conversion de type, c'est à direBoolean(bar) === !!bar
La classe Boolean rochers. Au lieu de ce code spaghetti :
Vous pouvez faire ce que tout programmeur et n'étendre le prototype!
Beaucoup mieux maintenant.
expression ? this.launch() : this.dontLaunch()
Pensez que votre deuxième exemple est encore pire spaghettiAvant la question ci-dessus d'abord la fonction Booléenne,
Boolean ()
Suivant: tout avec une réelle valeur return true. E. g
tout sans réelle valeur return false E. g
Maintenant la
Boolean
objet est un objet wrapper pour une valeur booléenne. La valeur passée comme premier paramètre est converti en une valeur booléenne, si nécessaire. Si la valeur est omise ou est0, -0, null, false, NaN, undefined
, ou la chaîne vide (""
), l'objet a une valeur initiale de faux. Toutes les autres valeurs, y compris n'importe quel objet ou la chaîne "false", créer un objet avec une valeur initiale de vrai.Cela permet très puissant astuces.
Question intéressante:
Vous d'utiliser les nouvelles Booléen pour créer un objet boolean. Il peut y avoir beaucoup de scénarios, mais j'ai discuté ci-dessous un scénario.
Supposons que vous voulez une comparaison dans votre code où vous voulez faire correspondre la chaîne de valeur et son type de données et il a pour booléen (vrai/faux), alors vous allez utiliser un nouveau boolean plutôt que d'attribuer une simple valeur false.