如何检查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。
-
首先,可能是最优的,是强制进行布尔评估,然后检查它是否等于原始值:
function isBoolean( n ) { return !!n === n; }
-
做一个简单的检查types:
function isBoolean( n ) { return typeof n === 'boolean'; }
-
做一个彻底的矫枉过正和不必要的实例化一个类包装的主要:
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"; }