web-dev-qa-db-ja.com

TypeがBooleanかどうかを調べる方法

変数の型がBoolean型かどうかを確認する方法はありますか。

つまり、次のような代替手段があります。

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

しかし、それは私にはよく見えません。

これを達成するためのよりクリーンな方法はありますか?

191
Matias Cicero

それが typeof にあります。括弧は 演算子 なのでオプションです。

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

単にプリミティブ値をチェックしたい場合

typeof variable === 'boolean'

何らかの理由でコンストラクタで作成されたブール値がある場合、それらは実際のブール値ではなくプリミティブブール値を含むオブジェクトです。プリミティブブール値とnew Booleanで作成されたオブジェクトの両方をチェックする1つの方法は

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
30
adeneo

pure JavaScript を使えば、単にtypeofを使ってtypeof falsetypeof trueのようなことをするだけで"boolean"...が返されます。

しかし、それだけではありません。JavaScriptで Boolean をチェックするさまざまな方法を示すために、以下の関数を作成します。いくつかの新しいフレームワークでさまざまな方法を実行できます。

function isBoolean(val) {
   return val === false || val === true;
}

または1行 ES6 way ...

const isBoolean = val => 'boolean' === typeof val;

そしてそれを好きに呼ぶ!

isBoolean(false); //return true

Underscore のソースコードでも、(関数名の先頭に_。を付けて)これをチェックしています。

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 を使用する場合は、type boolean も使用できます。

let isDone: boolean = false;

これを行うもう1つの方法は、値をブール値に変換して、まったく同じかどうかを確認することです。

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

または好き

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

そしてそれを呼ぶ!

isBoolean(false); //return true

JavaScriptでは本当に簡単なチェックなので、このためにフレームワークを使用することはお勧めできません。

21
Alireza

これを実現するために純粋なJavascriptを使用できます。

var test = true;
if (typeof test === 'boolean')
   console.log('test is a boolean!');
14
Morry

JQueryの有無にかかわらずこれをチェックするには3つの「バニラ」方法があります。

  1. まず、強制によるブール評価を強制してから、元の値と等しいかどうかを確認します。

    function isBoolean( n ) {
        return !!n === n;
    }
    
  2. 簡単なtypeofチェックをする:

    function isBoolean( n ) {
        return typeof n === 'boolean';
    }
    
  3. プリミティブ上でクラスラッパーを完全にやり過ぎて不要なインスタンス化をする:

    function isBoolean( n ) {
        return n instanceof Boolean;
    }
    

3番目のものはtrue のみを返します - new Booleanクラスを作成してそれを渡す場合。

(#1に示すように)プリミティブの強制について詳しく説明するために、すべてのプリミティブ型をこのようにチェックすることができます。

  • Boolean

    function isBoolean( n ) {
        return !!n === n;
    }
    
  • Number

    function isNumber( n ) {
        return +n === n;
    }
    
  • String

    function isString( n ) {
        return ''+n === n;
    }
    
11
iSkore

関数がブール値オブジェクトも検証できるようにしたい場合は、最も効率的な解決策が必要です。

function isBoolean(val) {
  return val === false || val === true || val instanceof Boolean;
}
6
Willem Franco

私はLodashに行きます: isBoolean 渡された変数がプリミティブ型のブール値かブール値のラッパーオブジェクトかをチェックします。

JavaScriptで変数の型をチェックする最も信頼できる方法は 以下 です。

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 new Boolean(true)typeof trueを返すのに対して"boolean""object"を返すことです。

2

Oneliner typeof v === "boolean"を含むisBooleanのような関数を作成することは長期的には非常に扱いにくいようです。ほとんどの人があなた自身の機能を作成することを提案していることに驚きました。ネイティブプロトタイプを拡張するのと同じ癌のようです。

  • 関与しているすべてのプロジェクトでそれらを再作成する必要があります。
  • 他の開発者は異なる習慣を持っているかもしれません、またはあなたのチェックのどの弱点があなたのチェックの弱点であるかを知るためにあなたがどのチェックの推進を使うかを見るためにあなたの関数のソースをチェックする必要
  • あなたが自分のプロジェクトに属さないサイト上のコンソールでライナーを1つ作成しようとすると、あなたはフラストレーションを感じます

typeof v === "boolean"を覚えておくだけでそれがすべてです。あなたのIDEにテンプレートを追加して、3文字のショートカットでそれを配置できるようにして幸せになりましょう。

0

Nodejsでは node-boolify を使ってisBoolean()を使うことができます。

        var isBoolean = require('node-boolify').isBoolean;
        isBoolean(true); //true
        isBoolean('true'); //true
        isBoolean('TRUE'); //false
        isBoolean(1); //true
        isBoolean(2); //false
        isBoolean(false); //true
        isBoolean('false'); //true
        isBoolean('FALSE'); //false
        isBoolean(0); //true
        isBoolean(null); //false
        isBoolean(undefined); //false
        isBoolean(); //false
        isBoolean(''); //false
0
  • 最も読みやすいものはval === false || val === trueです。
  • typeof variable == typeof trueも読めます。
  • 最短ですが、まったく読めません:!!val === val

    説明:

    • [!!] 二重感嘆符 マークは値をブール値に変換します。
    • [===] トリプルイコール /厳密に等しいかどうかをテストします。タイプ(ブール値)と値の両方が同じである必要があります。
    • 元の値がブール値ではない場合、それはトリプルイコールテストに合格しません。それがブール変数である場合、それはトリプルイコールテストに合格します(両方のタイプと値で)。

    テスト:

    • !! 5 === 5 // false
    • !! 'test' === 'test' // false
    • val = new Date()とします。 !! val === val // false
    • !! true === true // true
    • !! false === false // true
0
TechWisdom

Es2015矢印機能によるもう1つの決定

const isBoolean = val => typeof val === 'boolean';
0
Gor
if(['true', 'yes', '1'].includes(single_value)) {
    return  true;   
}
else if(['false', 'no', '0'].includes(single_value)) {
    return  false;  
}

文字列がある場合

0
Denver

時にはそれをチェックするための単一の方法が必要です。 typeofは日付などで動作していません。

Date.prototype.getType() { return "date"; }

またNumberStringBooleanなどの場合も、一方向で型をチェックする必要があります。

0
Imam Kuncoro

引数のtypeofをチェックする関数を作成することができます。

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