如何检查类型是否为布尔类型
如何检查一个类型是否为布尔类型
在JavaScript中,我们可以使用typeof运算符来检查一个变量的类型。如果我们只想检查一个变量是否是布尔类型的原始值,我们可以使用typeof运算符和字符串'boolean'进行比较。例如:typeof variable === 'boolean'
。
但如果我们有一些使用构造函数创建的布尔类型,那么这些实际上并不是真正的布尔类型,而是包含原始布尔值的对象。对于这种情况,我们可以使用以下方法同时检查原始布尔类型和使用new Boolean
创建的对象:
function checkBool(bool) { return typeof bool === 'boolean' || (typeof bool === 'object' && bool !== null && typeof bool.valueOf() === 'boolean'); }
这个方法会判断传入的参数是否为布尔类型,无论是原始布尔类型还是使用new Boolean
创建的对象。如果是布尔类型,则返回true,否则返回false。
下面是一些使用这个方法的示例:
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中,你可以简单地使用typeof并执行typeof false或typeof true,它将返回"boolean"...
但这并不是唯一的方法,我在下面创建了一些函数来展示在JavaScript中检查布尔型的不同方法,以及在一些新框架中可以使用的不同方法,让我们从这个开始:
function isBoolean(val) { return val === false || val === true; }
或者使用一行的ES6方式...
const isBoolean = val => 'boolean' === typeof val;
然后像这样调用它!
isBoolean(false); //返回true
在Underscore源代码中,他们通过以下方式进行检查(函数名以_开头):
isBoolean = function(obj) { return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; };
在jQuery中,你可以这样检查:
jQuery.type(true); //返回"boolean"
在React中,如果使用propTypes,你可以像这样检查一个值是否为布尔型:
MyComponent.propTypes = { children: PropTypes.bool.isRequired };
如果使用TypeScript,你也可以使用类型boolean:
let isDone: boolean = false;
还有另一种方法,就是将值转换为布尔型,然后看它是否仍然相同,像这样:
const isBoolean = val => !!val === val;
或者像这样:
const isBoolean = val => Boolean(val) === val;
然后调用它!
isBoolean(false); //返回true
在JavaScript中,不建议使用任何框架来进行这个简单的检查。
不同意:new Boolean(true) === new Boolean(true)
应该返回false(因为引用是不同的)。这就是为什么isBoolean(new Boolean(true))
会返回false,而实际上应该返回true(new Boolean(true)
的类型是boolean)。
你如何为val指定类型? export const isBoolean = (val: ???): boolean => "boolean" === typeof val
如何检查类型是否为布尔类型?
在JavaScript中,我们可以使用typeof
操作符来检查变量的类型。这个操作符返回一个字符串,表示变量的类型。例如,我们可以使用typeof
来检查一个变量是否为布尔类型。
下面是一个使用typeof
来检查布尔类型的示例代码:
if (typeof variable == "boolean") { // variable是一个布尔类型 }
需要注意的是,typeof
不是一个函数,而是一个操作符。所以括号是可选的。
然而,有一个问题是,当使用大写字母B的Boolean对象时,typeof
会返回"object"而不是"boolean"。
另外,使用typeof
和字符串比较是比较慢的,不建议使用它们。可以直接使用(variable === true || variable === false)
来检查变量是否为布尔类型。
以下是一些关于检查布尔类型的问题和讨论:
- 问为什么使用typeof(name)
输出的是"string"?实际上,name
是一个全局的window属性,并且有一个特殊的getter。
- 有人建议使用typeof(variable) === typeof(true)
来检查布尔类型,是否更可靠?但实际上,使用更简洁的typeof true
返回的是"boolean"更加直观和明确。
- 有人问英语中是用大写字母B拼写布尔类型还是小写字母b拼写?实际上,在英语中布尔类型是用小写字母b拼写的。
总结起来,我们可以使用typeof
操作符来检查变量的类型是否为布尔类型。但需要注意的是,使用大写字母B的Boolean对象时,typeof
会返回"object"而不是"boolean"。为了更直观和明确地检查布尔类型,可以直接使用(variable === true || variable === false)
来进行判断。