変数の型がBoolean型かどうかを確認する方法はありますか。
つまり、次のような代替手段があります。
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
しかし、それは私にはよく見えません。
これを達成するためのよりクリーンな方法はありますか?
それが typeof
にあります。括弧は 演算子 なのでオプションです。
if (typeof variable === "boolean"){
// variable is a boolean
}
単にプリミティブ値をチェックしたい場合
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
pure JavaScript を使えば、単にtypeof
を使ってtypeof false
やtypeof 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では本当に簡単なチェックなので、このためにフレームワークを使用することはお勧めできません。
これを実現するために純粋なJavascriptを使用できます。
var test = true;
if (typeof test === 'boolean')
console.log('test is a boolean!');
JQueryの有無にかかわらずこれをチェックするには3つの「バニラ」方法があります。
まず、強制によるブール評価を強制してから、元の値と等しいかどうかを確認します。
function isBoolean( n ) {
return !!n === n;
}
簡単なtypeof
チェックをする:
function isBoolean( n ) {
return typeof n === 'boolean';
}
プリミティブ上でクラスラッパーを完全にやり過ぎて不要なインスタンス化をする:
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;
}
関数がブール値オブジェクトも検証できるようにしたい場合は、最も効率的な解決策が必要です。
function isBoolean(val) {
return val === false || val === true || val instanceof Boolean;
}
私は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"
を返すことです。
Oneliner typeof v === "boolean"
を含むisBoolean
のような関数を作成することは長期的には非常に扱いにくいようです。ほとんどの人があなた自身の機能を作成することを提案していることに驚きました。ネイティブプロトタイプを拡張するのと同じ癌のようです。
typeof v === "boolean"
を覚えておくだけでそれがすべてです。あなたのIDEにテンプレートを追加して、3文字のショートカットでそれを配置できるようにして幸せになりましょう。
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
val === false || val === true
です。typeof variable == typeof true
も読めます。最短ですが、まったく読めません:!!val === val
。
説明:
テスト:
Es2015矢印機能によるもう1つの決定
const isBoolean = val => typeof val === 'boolean';
if(['true', 'yes', '1'].includes(single_value)) {
return true;
}
else if(['false', 'no', '0'].includes(single_value)) {
return false;
}
文字列がある場合
時にはそれをチェックするための単一の方法が必要です。 typeofは日付などで動作していません。
Date.prototype.getType() { return "date"; }
またNumber
、String
、Boolean
などの場合も、一方向で型をチェックする必要があります。
引数のtypeof
をチェックする関数を作成することができます。
function isBoolean(value) {
return typeof value === "boolean";
}