私は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");
}
この癖はこれまでに役に立ちましたか?
回答:
操作の順序により(0 < 5 < 3)
、JavaScript ((0 < 5) < 3)
で生成されるものとして解釈され(true < 3)
、trueは1としてカウントされ、trueを返します。
これは(0 < 5 < 1)
、falseを(0 < 5)
返し、trueを返す理由でもあります。これはと解釈され1
、結果としてになり(1 < 1)
ます。
if(0 < 5 < 1) == false
。すべてが明確になりました、ありがとう:)
((0 < 5) && (5 < 3))
おそらく他にもありますが、私はそれらを知りません。
私の推測は0 < 5
trueであるためであり、trueにtrue < 3
キャストさ1 < 3
れます。
この癖が役立つかどうかについての質問について:便利な場合があるかもしれませんが(凝縮されたコードが目的の場合)、それに依存すると(おそらく)コードの理解しやすさが大幅に低下します。
これは、大きな式の一部としてポスト/プリインクリメント/デクリメントを使用するようなものです。このコードの結果が一目でわかるか?
int x = 5;
int result = ++x + x++ + --x;
注:このコードを使用すると、言語とコンパイラによっては異なる結果が得られる場合もあります。
あなた自身とあなたのコードを読む次の人のために人生を楽にするのは良い考えです。ブール値の暗黙的な変換のような副作用に頼るのではなく、実際に何をしたいのかを明確に書き出してください。
result
18歳ですか?
質問の2番目の部分への答えは、「この癖はこれまでに有用ですか?」前の回答で述べたように、trueが1にキャストされるのが確かに言語(Javascript)の癖であるが、プログラマーが一般的に1とtrue(および0とfalse)を同じこと。
ただし、1がtrueで0がfalseであるメンタルモデルがある場合、非常に便利で強力で直接的なあらゆる種類の優れたブールテクニックにつながります。たとえば、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が真であるかどうかを決定するために問題が一般化されている場合に、この手法が非常に役立つ場所の完璧な例です。
1 <3が真の場合に1を返す0 <5を評価していますか?
C#でこれを実行させたい "演算子 '<'は、タイプ 'bool'および 'int'のオペランドには適用できません"
0 < 5 < 3
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true
算術演算子に対して演算を行うと、ブールオペランドは数値を返します。これを確認するために
true + 1 which gives you 2.
その0 < 5
ため、数学演算子(<)で操作された返されたブール値(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();
をググった。