Comment puis-je vérifier si le type d'une variable est de type booléen?
Je veux dire, il existe des alternatives telles que:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Mais cela ne me semble pas joli.
Existe-t-il un moyen plus propre d'y parvenir?
javascript
jquery
types
Matias Cicero
la source
la source
true
oufalse
de type booléen?!!( ... some expression ...)
et le résultat sera un booléen.true
etfalse
sont des primitives de typeboolean
. Le type booléen capital-B est un type d'encapsuleur d'objet pour les primitives booléennes.if (new Boolean(false)) alert("hi");
- un objet booléen B majuscule est toujours "véridique", quelle que soit la valeur booléenne Little B sous-jacente.Réponses:
C'est pour ça
typeof
. Les parenthèses sont facultatives car il s'agit d'un opérateur .la source
typeof
.typeof
n'est pas une fonction. 2) L'utilisation de l'opérateur triple === avectypeof
n'est pas requise, car elle renverra toujours une chaîne (afaik, mais pour autant que je m'en souvienne, il y avait un autre cas pour certains navigateurs très anciens). 3)typeof
et les comparaisons de chaînes sont lentes. Ne les utilisez pas. Vérifiez directement avec(variable === true || variable === false)
(je suggère d'écrire une fonction).typeof(variable) === typeof(true)
plus robuste?name
est une propriété de fenêtre globale avec un getter spécial developer.mozilla.org/en-US/docs/Web/API/Window/nametypeof true
place de"boolean"
. Les nouvelles versions d'ECMAScript n'auront jamais de changements de rupture.Si vous voulez simplement vérifier une valeur primitive
Si pour une raison étrange vous avez créé des booléens avec le constructeur, ce ne sont pas vraiment des booléens mais des objets contenant une valeur booléenne primitive, et une façon de vérifier les booléens primitifs et les objets créés avec
new Boolean
est de faire:Afficher l'extrait de code
la source
new Boolean()
, qui n'est pas un booléen, mais un objet, mais qui contient toujours une valeur booléenne.new Boolean()
renvoie un objet (voir les commentaires sur la question). Mais peu importe :)typeof variable === typeof new Boolean()
et veut probablement juste une vérification de typeof régulière, mais s'est en quelque sorte retrouvé pris dans une étrange syntaxe jQuery.bool
paramètre transmis étaitnull
le, iltypeof bool === 'object'
serait toujours évalué et uneTypeError: Cannot read property 'valueOf' of null
exception serait levée lors de l'appel àtypeof bool.valueOf()
. Ainsi, je changerais cette dernière ligne pour lire:(typeof bool === 'object' && bool && typeof bool.valueOf() === 'boolean');
qui n'évaluera que quandbool
n'est pas nul.Avec du JavaScript pur , vous pouvez simplement utiliser
typeof
et faire quelque chose commetypeof false
outypeof true
et cela reviendra"boolean"
...Mais ce n'est pas la seule façon de le faire, je crée des fonctions ci-dessous pour montrer différentes façons de vérifier le booléen en JavaScript, ainsi que différentes façons de le faire dans certains nouveaux cadres, commençons par celui-ci:
Ou façon ES6 sur une ligne ...
et appelez ça comme!
Toujours dans le code source Underscore, ils le vérifient comme ceci (avec le _. Au début du nom de la fonction):
Aussi dans jQuery vous pouvez le vérifier comme ceci:
Dans React , si vous utilisez propTypes, vous pouvez vérifier qu'une valeur est booléenne comme ceci:
Si vous utilisez TypeScript , vous pouvez également utiliser le type booléen :
Une autre façon de le faire, c'est comme convertir la valeur en booléen et voir si c'est toujours la même chose, quelque chose comme:
ou comme:
et appelez-le!
Il n'est pas recommandé d'utiliser un framework pour cela car c'est vraiment une simple vérification en JavaScript.
la source
new Boolean(true) === new Boolean(true)
doit retourner false (car les références sont différentes). C'est pourquoi leisBoolean(new Boolean(true))
va dire faux alors qu'il doit être vrai (new Boolean(true)
est de type booléen ).Il existe trois façons "vanille" de vérifier cela avec ou sans jQuery.
La première consiste à forcer l'évaluation booléenne par coercition, puis à vérifier si elle est égale à la valeur d'origine:
Faire une simple
typeof
vérification:Faire une instanciation complètement exagérée et inutile d'un wrapper de classe sur une primitive:
Le troisième ne reviendra que
true
si vous créez unnew Boolean
classe et la transmettez.Pour élaborer sur la coercition des primitives (comme indiqué dans # 1), tous les types de primitives peuvent être vérifiés de cette manière:
Boolean
:Number
:String
:la source
typeof
? J'en doute fortement.typeof
est aussi 1 contrainte, mais latypeof
méthode fait quelques getters et comparaisons à l'intérieur + 1 comparaison à la toute fin. Voici la référence V8 pourtypeof
!!
c'est plus rapide, on ditBoolean
c'est plus rapide. Juste une référence à la petite taille du delta entre les tests. Les vérifications booléennes sont rapides. jsperf.com/bool-not-not jsperf.com/bool-vs-doublenottypeof val === "boolean"
est optimal.Vous pouvez utiliser du Javascript pur pour y parvenir:
la source
Si vous voulez que votre fonction puisse également valider des objets booléens, la solution la plus efficace doit être:
la source
Le moyen le plus fiable de vérifier le type d'une variable en JavaScript est le suivant :
La raison de cette complication est que
typeof true
retourne"boolean"
touttypeof new Boolean(true)
retourne"object"
.la source
"boolean"
si la valeur est vraiment un objet? Cela ne me semble pas très pratique. Les objets booléens doivent de toute façon être traités différemment des primitives booléennes.J'irais avec Lodash: isBoolean vérifie si la variable transmise est un objet wrapper booléen ou booléen primitif et rend donc compte de tous les cas.
la source
Vous pouvez créer une fonction qui vérifie la présence
typeof
d'un argument.la source
Parfois, nous avons besoin d'une seule façon de le vérifier. typeof ne fonctionne pas pour la date, etc.
Aussi pour
Number
,String
,Boolean
etc. nous avons souvent besoin de vérifier le type d'une manière unique ...la source
La création de fonctions comme celle
isBoolean
qui contient untypeof v === "boolean"
oneliner semble très difficile à long terme. je suis surpris que presque tout le monde suggère de créer votre propre fonction. Il semble que ce soit le même cancer que l'extension de prototypes natifs.juste mémoriser
typeof v === "boolean"
et c'est tout. Ajoutez un modèle à votre IDE pour pouvoir le mettre par un raccourci de trois lettres et soyez heureux.la source
v === true || v === false
, qui fait 2 vérifications en cas defalse
. Classement: (1 - les deux pratiquement les mêmes)typeof v === 'boolean
ettypeof v === typeof true
, (2)isBoolean(v)
, (3)v === true || v === false
.si vous avez une chaîne
la source
val === false || val === true
.typeof variable == typeof true
.Le plus court, mais pas lisible du tout:
!!val === val
.Explication:
Tests:
la source
Dans nodejs en utilisant node-boolify, nous pouvons utiliser isBoolean ();
la source
Une décision de plus avec la fonction flèche es2015
la source