以下のコードでは:
console.log((false || "test")? "first": "second"));
最初の部分のo/pはtest(false || "test")なので、最後のo / pはどのように最初になりますか?条件演算子が式をTrueまたはFalseとして評価できない場合、一般的に何が起こりますか?
以下のコードでは:
console.log((false || "test")? "first": "second"));
最初の部分のo/pはtest(false || "test")なので、最後のo / pはどのように最初になりますか?条件演算子が式をTrueまたはFalseとして評価できない場合、一般的に何が起こりますか?
javascriptのすべての値は、そのタイプに関係なく、ブール値に強制変換できます。
強制する値false
は「falsey」と呼ばれ、強制する値はtrue
「truthy」と呼ばれます。
この場合:
(false || "test") ? "first" : "second")
(false || "test")
は論理的に("test")
はfalse || X
と同等です(論理に興味がある場合、これは選言三段論法X
と呼ばれます)。
javascript内の空でない文字列(文字列を含む、'false'
そのバグを楽しんでいます)は、に強制されるtrue
ため、3次条件はに評価されtrue
てログに記録され'first'
ます。
演算子は、左側がtrueの||
場合は左側を返し、そうでない場合は右側を返します。
したがって(false || "test")
、です"test"
。
"test"
は真の値なので、次のようになります。
"test" ? "first" : "second"
三項演算子は、前の値が真の値(つまり)である:
場合、前の値を返します。?
条件演算子が式をTrueまたはFalseとして評価できない場合、一般的に何が起こりますか?
任意の式の結果は、真または偽の値であると評価できるため、それは決して起こりません。
Javascriptは暗黙的ににキャストtest
するためtrue
です。文字列をブール値に変換する際、Javascriptは空でない文字列をに変換しtrue
、空の文字列をに変換しfalse
ます。
したがって、||
演算子の最初のオペランドは、であるためfalse
、false || "test"
式は2番目の引数を返し、それまでにtrueに変換されます。したがってfirst
、出力として取得します。
「条件演算子が式をTrueまたはFalseとして評価できない場合、一般的に何が起こりますか?」
JavaScriptのすべての式は、すべての型がブール値に強制可能であるため、true
またはそれが原因で評価できます。false
あなたのコードでは、"test"
オペランドは効果的にとして評価されます。Boolean("test")
これはtrue
です。
に強制する値false
は次のとおりです。
false
(明らかに)NaN
""
(空の文字列)0
null
undefined
他のすべては考慮されtrue
ます。