[解決済み] if文の中のブーリアン
質問
今日、学校の課題で変数が真か偽かをチェックする方法を考えて、コードについて指摘を受けたんだ。
私が書いたコードは、次のようなものでした。
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;
}
...
関連
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
Vueにシンプルなメモ帳機能を実装
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
JavaScriptのStringに関する共通メソッド
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptで複数ケースを扱うSwitch文
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
JavaScriptのクロージャの説明
-
vue ディレクティブ v-html と v-text
-
vueにおけるfilterの適用シーンについて解説します。
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。