引数 - javascript true false 判定




Javascriptの新しいBoolean()の目的は何ですか? (4)

何の使用です:

var flag = new Boolean(false); 

に比べ:

var flag = false;

あなたは実際にいつnew Boolean使用しますか?


Booleanクラスが揺れます。 このスパゲッティコードの代わりに🍝:

if (foo===true) this.launch();
else this.dontLaunch();

あなたはどんな偉大なプログラマーがやっていて、プロトタイプを拡張することができます!

Boolean.prototype.ifTrue=function(ifFunc,elseFunc){
    if (this.valueOf()===true) ifFunc(); 
    else elseFunc();
}
var foo=new Boolean(/*expression*/);
foo.ifTrue(this.launch.bind(this),this.dontLaunch.bind(this));

今はるかに良い。


グローバル関数Boolean()は、 newなしで呼び出されたときに型キャストに使用できます。

var foo = Boolean(bar); // equivalent to `var foo = !!bar`

newで呼び出すと、ラッパーオブジェクトが追加で作成されます。つまり、オブジェクトに任意のプロパティを割り当てることができます。

var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);

これは、プリミティブがプロパティを保持できないため、プリミティブ値では不可能です。

var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`

プリミティブにプロパティを割り当てても、自動ボクシングのためエラーは発生しません。

foo.baz = 'quux';

次のように解釈されます

// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';

プリミティブ値を元に戻すには、 valueOf()メソッドを呼び出す必要があります。 これは、実際にラップされた値を使用する場合に必要です。ブール値のコンテキストでは、オブジェクトは常にラップされた値がfalseあってもtrueに評価されるためです。

ブーリアンにプロパティを割り当てることができるという有用なアプリケーションに遭遇したことはありませんが、ボクシングはプリミティブ値への参照が必要な場合に役立ちます。


他の人がこの理論に言及している間、私は実用的な部分について話しましょう:

Booleanオブジェクト(一般的なオブジェクトとして)は常に真実であるため、それらを使用することは悪い習慣とみなされます。 JSプログラミングの長年にわたり、私はそれらを使ったことがなく、他の人々のコードでもBoolean見ているのを覚えていません。 一度も。

プリミティブ値を使用すると混乱を避けることができ、コードが少し短くなります。

オブジェクトにラップされたboolが必要な場合は、次のようにObjectオブジェクトを使用することもできます。

foo = { value: false };

また、( foo = Boolean(bar)Boolean()コンストラクタを関数として呼び出すと、 !!を使った明示的な型キャストと同じ効果がありfoo = Boolean(bar) !! 後者は一般に前者より好ましい。


興味深い質問:

新しいブール値を使用してブール値オブジェクトを作成します。 多くのシナリオがありますが、以下では1つのシナリオについて説明しました。

文字列の値とそのデータ型を一致させたいコード内で比較を行い、bool(true / false)する必要がある場合、単純なfalse値を代入する代わりに新しいブール値を使用します。

var flag = false;  
var flag2 = new Boolean (false);
alert(typeof flag);  //boolean object
alert(typeof flag2); //simple object

if (flag === flag2){
    alert("Value and datatype match");
}
else{
    alert("Value and datatype do not match");
}




boolean