我如何检查一个变量的类型是否为布尔类型?

我的意思是,有一些替代方案,比如:

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

但这对我来说不太好。

有没有更清洁的方式来实现这个目标?


当前回答

您可以创建一个函数来检查参数的typeof。

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

其他回答

我会使用Lodash: isBoolean检查传入的变量是基元布尔型还是布尔型包装对象,因此可以解释所有情况。

关于es2015箭头函数的另一个决策

const isBoolean = val => typeof val === '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

这就是typeof存在的意义。括号是可选的,因为它是一个操作符。

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

使用纯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); //return true

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

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

在jQuery中,你也可以这样检查它:

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

在React中,如果使用propTypes,你可以检查一个值是否为布尔值,就像这样:

MyComponent.propTypes = {
  children: PropTypes.bool.isRequired
};

如果使用TypeScript,你也可以使用类型布尔:

let isDone: boolean = false;

还有另一种方法,比如将值转换为布尔值,看看它是否仍然完全相同,比如:

const isBoolean = val => !!val === val;

或者像:

const isBoolean = val => Boolean(val) === val;

叫它!

isBoolean(false); //return true

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