¿Cómo puedo verificar si el tipo de una variable es de tipo booleano?
Quiero decir, hay algunas alternativas como:
if(jQuery.type(new Boolean()) === jQuery.type(variable)) //Do something..Pero eso no me parece bonito.
¿Hay una manera más limpia de lograr esto?
Con JavaScript puro , puede simplemente usar typeof y hacer algo como typeof false o typeof true y devolverá "boolean" ...
Pero esa no es la única forma de hacerlo, estoy creando funciones a continuación para mostrar diferentes formas en que puede verificar Boolean en JavaScript, también diferentes formas en que puede hacerlo en algunos marcos nuevos, comencemos con este:
function isBoolean(val) { return val === false || val === true; }O vía ES6 de una línea...
const isBoolean = val => 'boolean' === typeof val;y llámalo como!
isBoolean(false); //return trueTambién en el código fuente de subrayado lo marcan así (con _. al comienzo del nombre de la función):
isBoolean = function(obj) { return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; };También en jQuery puedes comprobarlo así:
jQuery.type(true); //return "boolean"En React , si usa propTypes, puede verificar que un valor sea booleano como este:
MyComponent.propTypes = { children: PropTypes.bool.isRequired };Si usa TypeScript , también puede usar type boolean :
let isDone: boolean = false;También otra forma de hacerlo es como convertir el valor a booleano y ver si sigue siendo exactamente igual, algo así como:
const isBoolean = val => !!val === val;o como:
const isBoolean = val => Boolean(val) === val;¡y llámalo!
isBoolean(false); //return trueNo se recomienda usar ningún marco para esto, ya que en realidad es una verificación simple en JavaScript.
Si solo desea verificar un valor primitivo
typeof variable === 'boolean' Si por alguna extraña razón tiene booleanos creados con el constructor, esos no son realmente booleanos sino objetos que contienen un valor booleano primitivo, y una forma de verificar tanto los booleanos primitivos como los objetos creados con new Boolean es hacer:
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