Comment puis-je vérifier si le type d'une variable est de type Boolean?
Je veux dire, il existe des alternatives telles que:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Mais ça ne me semble pas joli.
Y a-t-il un moyen plus propre d'y parvenir?
C'est ce que typeof
est là pour. Les parenthèses sont facultatives puisqu'il s'agit d'un opérateur .
if (typeof variable === "boolean"){
// variable is a boolean
}
Si vous voulez juste vérifier une valeur primitive
typeof variable === 'boolean'
Si, pour une raison quelconque, vous avez créé des booléens avec le constructeur, ceux-ci ne sont pas vraiment des booléens, mais des objets contenant une valeur booléenne primitive. Un moyen de vérifier les booléens primitifs et les objets créés avec new Boolean
consiste à effectuer:
function checkBool(bool) {
return typeof bool === 'boolean' ||
(typeof bool === 'object' &&
bool !== null &&
typeof bool.valueOf() === 'boolean');
}
function checkBool(bool) {
return typeof bool === 'boolean' ||
(typeof bool === 'object' &&
bool !== null &&
typeof bool.valueOf() === 'boolean');
}
console.log( checkBool( 'string' )); // false, string
console.log( checkBool( {test: 'this'} )); // false, object
console.log( checkBool( null )); // false, null
console.log( checkBool( undefined )); // false, undefined
console.log( checkBool( new Boolean(true) )); // true
console.log( checkBool( new Boolean() )); // true
console.log( checkBool( true )); // true
console.log( checkBool( false )); // true
Avec JavaScript pur , vous pouvez simplement utiliser typeof
et faire quelque chose comme typeof false
ou typeof true
et il retournera "boolean"
...
Mais ce n'est pas la seule façon de faire cela, je crée des fonctions ci-dessous pour montrer différentes manières de vérifier Boolean en JavaScript, ainsi que différentes manières de le faire dans de nouveaux cadres, commençons par celui-ci:
function isBoolean(val) {
return val === false || val === true;
}
Ou en ligne ES6 way ...
const isBoolean = val => 'boolean' === typeof val;
et appelez comme ça!
isBoolean(false); //return true
Également dans Underscore code source, ils le vérifient comme suit (avec le _. Au début du nom de la fonction):
isBoolean = function(obj) {
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};
Également dans jQuery vous pouvez le vérifier comme ceci:
jQuery.type(true); //return "boolean"
Dans React , si vous utilisez propTypes, vous pouvez vérifier qu'une valeur est booléenne comme ceci:
MyComponent.propTypes = {
children: PropTypes.bool.isRequired
};
Si vous utilisez TypeScript , vous pouvez utiliser le type boolean aussi:
let isDone: boolean = false;
Une autre façon de procéder consiste également à convertir la valeur en valeur booléenne et à voir si elle est toujours identique, quelque chose comme:
const isBoolean = val => !!val === val;
ou comme:
const isBoolean = val => Boolean(val) === val;
et appelez ça!
isBoolean(false); //return true
Il n'est pas recommandé d'utiliser un framework pour cela car c'est vraiment une simple vérification en JavaScript.
Vous pouvez utiliser du Javascript pur pour y parvenir:
var test = true;
if (typeof test === 'boolean')
console.log('test is a boolean!');
Il existe trois façons de vérifier cela avec ou sans jQuery.
La première consiste à forcer l'évaluation booléenne par la contrainte, puis à vérifier si elle est égale à la valeur d'origine:
function isBoolean( n ) {
return !!n === n;
}
Effectuer une simple vérification typeof
:
function isBoolean( n ) {
return typeof n === 'boolean';
}
Faire une instanciation excessive et inutile d'un wrapper de classe sur un primatif:
function isBoolean( n ) {
return n instanceof Boolean;
}
Le troisième ne renverra que true
si vous créez une classe new Boolean
et le transmettez.
Pour élaborer sur la contrainte des primitives (comme indiqué au n ° 1), tous les types de primitives peuvent être vérifiés de la manière suivante:
Boolean
:
function isBoolean( n ) {
return !!n === n;
}
Number
:
function isNumber( n ) {
return +n === n;
}
String
:
function isString( n ) {
return ''+n === n;
}
Si vous voulez que votre fonction puisse aussi valider des objets booléens, la solution la plus efficace doit être:
function isBoolean(val) {
return val === false || val === true || val instanceof Boolean;
}
Je voudrais aller avec Lodash: isBoolean vérifie si la variable transmise est un objet wrapper booléen ou booléen primitif et rend compte de tous les cas.
Le moyen le plus fiable de vérifier le type d'une variable en JavaScript est le suivant :
var toType = function(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
toType(new Boolean(true)) // returns "boolean"
toType(true); // returns "boolean"
La raison de cette complication est que typeof true
renvoie "boolean"
alors que typeof new Boolean(true)
renvoie "object"
.
val === false || val === true
.typeof variable == typeof true
.Le plus court, mais pas du tout lisible: !!val === val
.
Explication:
Tests:
Créer des fonctions telles que isBoolean
qui contient oneliner typeof v === "boolean"
semble très peu pratique à 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 indigènes.
il suffit de mémoriser typeof v === "boolean"
et c'est tout. Ajoutez un modèle à votre IDE pour pouvoir le mettre en forme avec un raccourci de trois lettres et être heureux.
Dans nodejs en utilisant node-boolify nous pouvons utiliser isBoolean ();
var isBoolean = require('node-boolify').isBoolean;
isBoolean(true); //true
isBoolean('true'); //true
isBoolean('TRUE'); //false
isBoolean(1); //true
isBoolean(2); //false
isBoolean(false); //true
isBoolean('false'); //true
isBoolean('FALSE'); //false
isBoolean(0); //true
isBoolean(null); //false
isBoolean(undefined); //false
isBoolean(); //false
isBoolean(''); //false
Encore une décision avec la fonction es2015 arrow
const isBoolean = val => typeof val === 'boolean';
if(['true', 'yes', '1'].includes(single_value)) {
return true;
}
else if(['false', 'no', '0'].includes(single_value)) {
return false;
}
si vous avez une ficelle
Parfois, nous avons besoin d'une seule façon de le vérifier. typeof ne fonctionnait pas pour la date, etc.
Date.prototype.getType() { return "date"; }
Aussi, pour Number
, String
, Boolean
etc. nous avons souvent besoin de vérifier le type d'une seule manière ...
Vous pouvez créer une fonction qui vérifie la typeof
pour un argument.
function isBoolean(value) {
return typeof value === "boolean";
}