5

条件がその値を決定する場合、JavaScriptはどのように機能しますか?, 次の例を参照してください:

<script type="text/javascript">

var bar = ("something" == true);
alert(bar); // 1

if ("something") {
    alert("hey!"); // 2
}

</script>

//1 の 'bar' が false なのに //2 に到達するのはなぜですか?

私が見ることができるようにbar、値は if 条件とほぼ同じ方法で計算されますか、そうではありませんか?

4

5 に答える 5

4

"something" == true文字列とブール値を比較可能な型に強制する必要があるため、false です。ただし、if("something")空でない文字列は真の値であるため、機能します。

于 2012-07-18T16:59:20.880 に答える
2

これは、javascript型の強制エンジンがどのように機能するかによるものです。あなたが言う時

"something" == true

javascriptは、「何か」の文字列に対してToNumberを呼び出して、ブール値と比較します。「何か」は、真に等しくないNaNを生成します。

でも

if("something")

文字列が真実かどうかだけをチェックします。空の文字列ではないので、実際には真実です。

詳細はこちら:http ://webreflection.blogspot.co.il/2010/10/javascript-coercion-demystified.html

于 2012-07-18T17:01:07.073 に答える
1
if("something")

は有効な文字列であるtrueため、上記の宣言が返されます。空の文字列()の場合"something"は戻ります。これは数値でも発生します(は戻りますが、は戻ります)。false""0false1true

では"something"==true、両方が文字列に変換されてからチェックされます( "something" == "true"、これはを返しfalseます)。

于 2012-07-18T17:01:33.393 に答える
1

これは、最初のケースでは、JavaScript がそれらを文字列 (lit. "something" == "true") として比較しようとするためです。これは false になります。

ただし、2 番目の条件では、式の結果は であり"something"、これをブール値にキャストすると、 になりtrueます。

詳細はこちらをご覧ください。

于 2012-07-18T17:00:11.007 に答える
0

問題は、javascript が if ステートメントを処理する方法ではなく、javascript がオブジェクト型を強制する方法です。

空でない文字列は true ですが、true にはなりません。"something != falseこれは、を返すかどうかを確認できますtrue

このため、多くの人がこれらの落とし穴を避けるために JavaScript での厳密な比較を推奨しています。

例えば:

"something" !== false // true
"something" === true  // false
"" === false          // false
0 === false           // false

これを読むために、たくさんの記事があります。ダグラス・クロックフォードをお勧めします。

于 2012-07-18T17:09:17.053 に答える