如何检查types是否为布尔值

我怎样才能检查一个variables的types是布尔types?

我的意思是,有一些替代scheme,如:

if(jQuery.type(new Boolean()) === jQuery.type(variable)) //Do something.. 

但是这对我来说不是很好。

有一个更清洁的方法来实现这一目标吗?

那是什么types的。 由于是操作员,所以括号是可选的。

 if(typeof(variable) === "boolean"){ // variable is a boolean } 

如果你只是想检查一个原始值

 typeof variable === 'boolean' 

如果出于某种奇怪的原因,您使用构造函数创build了布尔值,那么这些布尔值不是真正的布尔值,而是包含原始布尔值的对象,检查原始布尔值和使用new Boolean值创build的对象的一种方法是:

 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 

你可以使用纯JavaScript来实现这一点:

 var test = true; if (typeof test === 'boolean') console.log('test is a boolean!'); 

在JavaScript中检查variablestypes的最可靠方法如下 :

 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" 

这种并发症的原因是typeof true返回"boolean"typeof new Boolean(true)返回"object"

我会用Lodash: isBoolean检查传入的variables是原始布尔还是布尔包装对象,并因此说明所有情况。

用纯JavaScript,只需简单地这样做:

 function isBoolean(val) { return val === false || val === true; } 

并呼吁!

 isBoolean(false); //return true 

也在下划线的源代码中,他们像这样检查它(在函数名称的开头用_):

 isBoolean = function(obj) { return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; }; 

另外在jQuery中,你可以检查它如下:

 jQuery.type(true); //return "boolean" 

build议不要使用任何框架,因为这实际上是一个简单的JavaScript检查。

如果你想让你的函数也可以validation布尔对象,最有效的解决scheme必须是:

 function isBoolean(val) { return val === false || val === true || val instanceof Boolean; } 

有三种“香草”的方法来检查这个有没有jQuery。

  1. 首先,可能是最优的,是强制进行布尔评估,然后检查它是否等于原始值:

     function isBoolean( n ) { return !!n === n; } 
  2. 做一个简单的检查types:

     function isBoolean( n ) { return typeof n === 'boolean'; } 
  3. 做一个彻底的矫枉过正和不必要的实例化一个类包装的主要:

     function isBoolean( n ) { return n instanceof Boolean; } 

如果你创build了一个new Boolean类并且传入了第三个类, 那么第三个将只返回true

为了详细说明基元强制(如#1所示),所有的基元types都可以这样检查:

  • Boolean

     function isBoolean( n ) { return !!n === n; } 
  • Number

     function isNumber( n ) { return +n === n; } 
  • String

     function isString( n ) { return ''+n === n; } 

你可以创build一个函数来检查参数的typeof

 function isBoolean(value) { return typeof value === "boolean"; }