私はjsfiddle.netで遊んでいましたが、なぜこれがtrueを返すのか興味がありますか?
if(0 < 5 < 3) {
alert("True");
}
これもそうです:
if(0 < 5 < 2) {
alert("True");
}
しかし、これはしません:
if(0 < 5 < 1) {
alert("True");
}
この癖は役に立ちますか?
私はjsfiddle.netで遊んでいましたが、なぜこれがtrueを返すのか興味がありますか?
if(0 < 5 < 3) {
alert("True");
}
これもそうです:
if(0 < 5 < 2) {
alert("True");
}
しかし、これはしません:
if(0 < 5 < 1) {
alert("True");
}
この癖は役に立ちますか?
操作の順序により、javascriptで(0 < 5 < 3)
解釈され、true が 1 としてカウントされ、true が返されます。((0 < 5) < 3)
(true < 3)
(0 < 5 < 1)
これがfalse を返す理由でもあり、 (0 < 5)
true を返します。これは と解釈され1
、結果は になり(1 < 1)
ます。
私の推測では、0 < 5
が true であり、どちらが truetrue < 3
にキャストされる1 < 3
かということです。
おそらくそうtrue
仮定されているから1
0 < 5 < 3 --> true < 3 --> 1 < 3 --> true
なぜならtrue < 3
、なぜならtrue == 1
この癖が役に立つかどうかというあなたの質問については、(凝縮されたコードが目的の場合) 役立つ場合があると思いますが、それに依存すると (ほとんどの場合) コードの理解度が大幅に低下します。
より大きな式の一部としてポスト/プリインクリメント/デクリメントを使用するようなものです。このコードの結果が一目でわかりますか?
int x = 5;
int result = ++x + x++ + --x;
注: このコードでは、言語とコンパイラによって異なる結果が得られる場合もあります。
あなた自身とあなたのコードを読む次の人のために人生を楽にするのは良い考えです. ブール値の暗黙的な変換などの副作用に頼るのではなく、実際に発生させたいことを明確に記述してください。
質問の 2 番目の部分、「この癖は役に立ちますか?」に対する答えです。true が 1 にキャストされるのが実際に言語 (Javascript) の癖である場合、プログラマーは一般に 1 と true (および 0 と false) を同じこと。
しかし、1 が真で 0 が偽であるというメンタル モデルがある場合、非常に便利で、強力で、直接的なあらゆる種類の優れたブール演算手法につながります。たとえば、A > 100 の結果でカウンターを直接インクリメントすることができます。これは、A が 100 より大きい場合にカウンターをインクリメントします。この手法は、Java では癖またはトリックと見なされる場合がありますが、配列言語または関数型言語では見られます。慣用句かもしれません。
配列言語 APL の古典的な例は、配列内の (たとえば) 100 より大きい項目の数を数えることです。
+/A>100
A が 5 項目の配列 107 22 256 110 3 の場合:
A>100
5 項目のブール配列を生成します。
1 0 1 1 0
このブール値の結果を合計します。
+/1 0 1 1 0
最終的な答えが得られます:
3
この質問は、特に問題が一般化されて m 個のブール値のうち n 個が true であるかどうかを判断する場合に、この手法が非常に役立つことを示す完璧な例です。
簡単だ。
(0 < 5 < 3)
左から右に開始して、最初の 0 < 5 を評価します。本当ですか? はい。TRUE=1 なので、1 < 3 と評価されます。1 は 3 より小さいので、真です。
これで
(0 < 5 < 1)
0 は 5 未満ですか? はい。したがって、これも 1 を意味する TRUE にします。その事実を念頭に置いて、(1 < 1) と評価します。1 は 1 より小さいですか? いいえ、したがって、それは誤りです。等しくなければなりません。
少し前に Obj-C でこれに遭遇し、非常に困惑しました。次のようなことを行うことで、必要な結果が得られました。
if(0 < 5 && 5 < 3) {
alert("True");}
もちろんこれは間違っているので、「本当の」アラートは表示されません。これを読んでよかった、今その理由がわかりました。
1<3 が true の場合、true に対して 1 を返す 0<5 を評価していますか?
C# では、「演算子 '<' は型 'bool' および 'int' のオペランドには適用できません」
Python に加えて、CoffeeScript は連鎖比較をサポートする別の言語であるため、vanilla JS3 < x < 10
に変換されます。(3 < x && x < 10)
0 < 5 < 3
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true
算術演算子を操作すると、ブール型オペランドは数値を返します。これを確認するために
true + 1 which gives you 2.
したがって0 < 5
、返された boolean(true) は数学演算子 (<) で操作され、数値が返されます。したがって、それは 1<3 に沸騰します。true
結果を Number() として表現してみてください
if(Number(0) < Number(5) < Number(3)) {
alert("True");
}
またはこれを試してください:
if(Number(0) < Number(5) && Number(5) < Number(3)) {
alert("True");
}
私は取得していたのでこれをグーグルで検索しましたが、文字列形式で印刷されていた関数からこの値を取得していたため、 (3 >= 20) //returning true
javascript が3
ブール値としてチェックしようとしていたと思います。elm.getAttribute();
console.log();