如何检查type是否为Boolean

Mat*_*ero 222 javascript jquery types

如何检查变量的类型是否为Boolean类型?

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

if(jQuery.type(new Boolean()) === jQuery.type(variable))
      //Do something..
Run Code Online (Sandbox Code Playgroud)

但这对我来说似乎不太好看.

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

Ami*_*oki 430

那是什么typeof.括号是可选的,因为它是一个运算符.

if (typeof variable === "boolean"){
  // variable is a boolean
}
Run Code Online (Sandbox Code Playgroud)

  • 1)`typeof`不是函数.2)使用带有`typeof`的三元运算符===不是必需的,因为它总是返回一个字符串(afaik,但据我记得,对于一些非常古老的浏览器还有另一种情况).3)`typeof`和字符串比较很慢.不要使用它们.直接用`(变量=== true || variable === false)`(我建议写一个函数). (13认同)
  • 目前尚不清楚OP正在尝试做什么,但是大写B布尔对象通过`typeof`将"对象"作为其类型. (6认同)
  • 不会`typeof(变量)=== typeof(true)`更健壮吗? (6认同)
  • @TusharNiras`name`是一个全局窗口属性,带有一个特殊的*getter*https://developer.mozilla.org/en-US/docs/Web/API/Window/name (2认同)
  • @MarcusJuniusBrutus @AmitJoki 那是无稽之谈,使用更冗长的 `typeof true` 而不是 `"boolean"` 没有任何优势。新版本的 ECMAScript 永远不会有任何重大更改。 (2认同)

ade*_*neo 32

如果您只想检查原始值

typeof variable === 'boolean'
Run Code Online (Sandbox Code Playgroud)

如果由于一些奇怪的原因你有使用构造函数创建的布尔值,那些不是真正的布尔值,而是包含原始布尔值的对象,并且检查原始布尔值和创建的对象的一种方法new Boolean是:

function checkBool(bool) {
    return typeof bool === 'boolean' || 
           (typeof bool === 'object' && 
            bool !== null            &&
           typeof bool.valueOf() === 'boolean');
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 将布尔基元和布尔对象视为相同对我来说似乎不太实用,因为无论如何我都不能以相同的方式使用它们。 (2认同)

Ali*_*eza 26

随着纯JavaScript,你可以简单地使用typeof,并完成类似typeof false或者typeof true,它会返回"boolean"...

但这不是唯一的方法,我在下面创建函数以显示在JavaScript中检查布尔值的不同方法,以及在一些新框架中可以使用的不同方法,让我们从这个开始:

function isBoolean(val) {
   return val === false || val === true;
}
Run Code Online (Sandbox Code Playgroud)

或单线ES6方式......

const isBoolean = val => 'boolean' === typeof val;
Run Code Online (Sandbox Code Playgroud)

并称之为!

isBoolean(false); //return true
Run Code Online (Sandbox Code Playgroud)

同样在Underscore源代码中,他们检查它(在函数名称的开头使用_.):

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

同样在jQuery中你可以这样检查:

jQuery.type(true); //return "boolean"
Run Code Online (Sandbox Code Playgroud)

React中,如果使用propTypes,您可以像这样检查一个boolean值:

MyComponent.propTypes = {
  children: PropTypes.bool.isRequired
};
Run Code Online (Sandbox Code Playgroud)

如果使用TypeScript,您还可以使用类型boolean:

let isDone: boolean = false;
Run Code Online (Sandbox Code Playgroud)

另一种方法是将值转换为布尔值,看看它是否完全相同,例如:

const isBoolean = val => !!val === val;
Run Code Online (Sandbox Code Playgroud)

或者喜欢:

const isBoolean = val => Boolean(val) === val;
Run Code Online (Sandbox Code Playgroud)

并称之为!

isBoolean(false); //return true
Run Code Online (Sandbox Code Playgroud)

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


Mor*_*rry 16

您可以使用纯Javascript来实现此目的:

var test = true;
if (typeof test === 'boolean')
   console.log('test is a boolean!');
Run Code Online (Sandbox Code Playgroud)


iSk*_*ore 14

有或没有jQuery,有三种"vanilla"方法可以检查这个.

  1. 首先是通过强制强制进行布尔评估,然后检查它是否等于原始值:

    function isBoolean( n ) {
        return !!n === n;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 做一个简单的typeof检查:

    function isBoolean( n ) {
        return typeof n === 'boolean';
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 对一个主要的类包装器做一个完全过度的和不必要的实例化:

    function isBoolean( n ) {
        return n instanceof Boolean;
    }
    
    Run Code Online (Sandbox Code Playgroud)

第三个只会true 你创建一个new Boolean类并将其传入时返回.

要详细说明基元强制(如#1所示),可以用这种方式检查所有基元类型:


Wil*_*nco 7

如果您希望您的函数也可以验证布尔对象,那么最有效的解决方案必须是:

function isBoolean(val) {
  return val === false || val === true || val instanceof Boolean;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tus 6

我会选择 Lodash: isBoolean检查传入的变量是原始布尔值还是布尔包装对象,因此考虑所有情况。


小智 5

检查 true 和 false 的最简单方法是: (typeof value === "boolean"),但如果value是该类的实例Boolean,那么它将返回"object"

因此,为了处理这个问题,我们必须添加另一个条件来检查是否:

(value instanceof Boolean)

代码片段:

const value = false;
//const value = new Boolean(10);
//const value = new Boolean("hi");

if((typeof value === "boolean") || (value instanceof Boolean))
    console.log("boolean");
else
    console.log("not boolean");
Run Code Online (Sandbox Code Playgroud)