我如何检查一个变量的类型是否为布尔类型?
我的意思是,有一些替代方案,比如:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
但这对我来说不太好。
有没有更清洁的方式来实现这个目标?
我如何检查一个变量的类型是否为布尔类型?
我的意思是,有一些替代方案,比如:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
但这对我来说不太好。
有没有更清洁的方式来实现这个目标?
当前回答
创建像isBoolean这样的函数,它包含了一个线性typeof v === "boolean",从长远来看似乎非常不方便。我很惊讶几乎每个人都建议创建自己的函数。这似乎与扩展原生原型是一样的癌症。
您需要在参与的每个项目中重新创建它们 其他开发人员可能有不同的习惯,或者需要检查您的函数的源代码,以查看您使用的检查的实现,以了解您的检查的弱点 你会感到沮丧,当你试图写一行在控制台现场不属于你的项目
记住typeof v === "boolean"就行了。 在IDE中添加一个模板,这样就可以通过一些三个字母的快捷方式来放置它。
其他回答
关于es2015箭头函数的另一个决策
const isBoolean = val => typeof val === 'boolean';
这就是typeof存在的意义。括号是可选的,因为它是一个操作符。
if (typeof variable == "boolean") {
// variable is a boolean
}
基准:
都很相似……
const { performance } = require('perf_hooks');
const boolyah = true;
var t0 = 0;
var t1 = 0;
const loops = 1000000;
var results = { 1: 0, 2: 0, 3: 0, 4: 0 };
for (i = 0; i < loops; i++) {
t0 = performance.now();
boolyah === false || boolyah === true;
t1 = performance.now();
results['1'] += t1 - t0;
t0 = performance.now();
'boolean' === typeof boolyah;
t1 = performance.now();
results['2'] += t1 - t0;
t0 = performance.now();
!!boolyah === boolyah;
t1 = performance.now();
results['3'] += t1 - t0;
t0 = performance.now();
Boolean(boolyah) === boolyah;
t1 = performance.now();
results['4'] += t1 - t0;
}
console.log(results);
// RESULTS
// '0': 135.09559339284897,
// '1': 136.38034391403198,
// '2': 136.29421120882034,
// '3': 135.1228678226471,
// '4': 135.11531442403793
使用或不使用jQuery,有三种“普通”方法来检查这一点。
首先是强制布尔值,然后检查它是否等于原始值: 函数isBoolean(n) { 返回! !N === N; } 做一个简单的检查: 函数isBoolean(n) { 返回typeof n === 'boolean'; } 在原语上对类包装器进行完全过度且不必要的实例化: 函数isBoolean(n) { 返回n instanceof Boolean; }
第三个函数只有在创建一个新的布尔类并将其传入时才会返回true。
为了详细说明基元强制(如#1所示),所有基元类型都可以这样检查:
布尔: 函数isBoolean(n) { 返回! !N === N; } 数量: 函数isNumber(n) 返回+n === n; } 字符串: 函数isString(n) { 返回" +n === n; }
如果你只是想检查一个原始值
typeof variable === 'boolean'
如果出于某种奇怪的原因,你使用构造函数创建了布尔值,这些布尔值并不是真正的布尔值,而是包含一个基本布尔值的对象,检查基本布尔值和使用new boolean值创建的对象的一种方法是:
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