À quoi sert:
var flag = new Boolean(false);
par rapport à:
var flag = false;
Quand utiliseriez-vous réellement new Boolean
?
À quoi sert:
var flag = new Boolean(false);
par rapport à:
var flag = false;
Quand utiliseriez-vous réellement new Boolean
?
La fonction globale Boolean()
peut être utilisé pour la conversion de type lorsqu'il est appelé sans new
, par exemple
var foo = Boolean(bar); // equivalent to `var foo = !!bar`
Lorsqu'elle est appelée avec new
, un objet wrapper seront créés en outre, ce qui signifie que vous pouvez assigner des propriétés de l'objet:
var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);
Ce n'est pas possible avec des valeurs primitives comme primitives ne peuvent pas contenir les propriétés:
var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`
L'attribution d'une propriété à une primitive de ne pas produire une erreur à cause de l'auto-boxing, c'est à dire
foo.baz = 'quux';
sera interprété comme
// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';
Pour obtenir la valeur primitive de retour, vous aurez pour appeler l' valueOf()
méthode. Cette opération est nécessaire si vous souhaitez utiliser le enveloppés de la valeur, car les objets d'évaluer à l' true
booléennes contextes - même si le enveloppés valeur est false
.
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.
Tandis que d'autres ont mentionné la théorie, permettez-moi de parler de la partie pratique:
Parce qu' Boolean
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 voir Boolean
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 ceci:
foo = { value: false };
Aussi, l'appel de la Boolean()
constructeur comme une fonction (en foo = Boolean(bar)
) a le même effet qu'explicite typecasting l'aide d' !!
, et le dernier est généralement privilégié par rapport à l'ancien.
Boolean primitives booléens et les objets ne sont pas les mêmes. MDC Docs:
Tout objet dont la valeur n'est pas undefined ou null, y compris un Booléen objet dont la valeur est false, évalue à vrai lorsqu'il est passé à une condition l'énoncé.
Ce comportement ne s'applique pas à Boolean primitives.
Le but de l'objet booléen est à convertir les non booléenne objets dans un booléen.
Vous pouvez utiliser le prototype pour définir des fonctions qui effectuent des opérations personnalisées sur le booléen, je pense que ce serait l'utilisation de celui-ci par rapport à l'utilisation d'une primitive.
Je pense également qu'il y a un effort pour rendre le javascript similaire à d'autres langues, car le javascript est souvent utilisé pour la communication à partir de services Web (en utilisant JSON).
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.