1. ホーム
  2. javascript

[解決済み] if文の中のブーリアン

2022-04-23 01:26:35

質問

今日、学校の課題で変数が真か偽かをチェックする方法を考えて、コードについて指摘を受けたんだ。

私が書いたコードは、次のようなものでした。

var booleanValue = true;

function someFunction(){
    if(booleanValue === true){
        return "something";
    }
}

こう書いた方がいい・きれいだと言われました。

var booleanValue = true;

function someFunction(){
    if(booleanValue){
        return "something";
    }
}

という部分について、「必要ない」「混乱を招く」という指摘を受けました。

しかし、私の考えでは、特にJavascriptはloetyped言語なので、変数がbooleanであるかどうかをチェックする方がよいと考えています。

2番目の例では、文字列も "something"を返すでしょう。

それとも、変数の型もチェックするのが良い方法なのでしょうか?

編集する 私の "real" コードでは、boolean は画像が削除されたかどうかを表すので、boolValue が持つべき唯一の値は true か false です。

例えば0や1はその変数に入れるべきではありません。

どのように解決するのですか?

まず、事実関係です。

if (booleanValue)

を満たすことになります。 if ステートメントを使用します。 booleanValue を含む true ゼロでない数値,空でない文字列,オブジェクトや配列の参照,などなど.

一方

if (booleanValue === true)

を満たすだけです。 if という条件は booleanValue と正確に等しい true . これ以外の真理値を満たすものはない。

一方、こうすれば。

if (someVar == true)

そして、Javascriptが行うのは、coerceと入力することです。 true の型と一致するように someVar を実行し、2つの変数を比較します。 これが意図したものでない可能性が高い状況はたくさんあります。 このため、ほとんどの場合は == なぜなら、Javascriptが2つのものを同じ型にするための型強制にはかなり長い規則があり、それらの規則をすべて理解し、2つの異なる型を与えられたときにJSインタプリタが行うであろうことをすべて予測できる場合(ほとんどのJS開発者には無理ですが)以外は、おそらくは == 完全に

分かりにくいという例として。

var x;

x = 0;
console.log(x == true);   // false, as expected
console.log(x == false);  // true as expected

x = 1;
console.log(x == true);   // true, as expected
console.log(x == false);  // false as expected

x = 2;
console.log(x == true);   // false, ??
console.log(x == false);  // false 

値の場合 2 と思うことでしょう。 2 は真実の値であるため、次のように比較されます。 true しかし、それは型の強制が働く方法ではない。 右手の値を左手の値の型に一致するように変換しているのです。 true を数値に変換します。 1 ということで、比較対象は 2 == 1 これは、あなたが意図したものではないことは確かです。

だから、買い手は気をつけよう。 おそらく == ただし、比較する型が明確で、型強制のアルゴリズムがどのように動作するかを知っている場合はこの限りではありません。


ということで、実際には booleanValue そして、そのコードをどのように動作させたいか。 もし、事前に true または false という値で明示的に比較します。

if (booleanValue === true)

は余計なコードで不要だし

if (booleanValue)

の方がよりコンパクトで、間違いなくクリーン/ベターです。

一方で、もしあなたが booleanValue が本当に設定されているかどうかをテストしたい場合。 true 他の自動的な型変換が許されていない状態で

if (booleanValue === true)

は良いアイデアであるばかりでなく、必須です。


例えば、実装を見ると .on() をjQueryで使用する場合、戻り値をオプションで指定することができます。 もしコールバックが false の場合、jQuery はイベントの伝播を自動的に停止します。 この場合、jQueryは以下の場合にのみイベントの伝播を停止させたいと考えています。 false が返された場合、その返り値を明示的にチェックします。 === false を望んでいないため undefined または 0 または "" または、自動的に false に型変換して比較を満たすようなもの。

例えば、以下はjQueryのイベント処理コールバックのコードです。

ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );

if ( ret !== undefined ) {
     event.result = ret;
     if ( ret === false ) {
         event.preventDefault();
         event.stopPropagation();
     }
 }

jQuery が明示的に ret === false .

しかし、jQueryのコードには、コードの欲求を考えると、よりシンプルなチェックが適切な箇所も多くあります。 例えば

// The DOM ready check for Internet Explorer
function doScrollCheck() {
    if ( jQuery.isReady ) {
        return;
    }
    ...