用語は何[0] == ![0]
を意味しますか?彼らは戻りますが、[0]のタイプがオブジェクトであり、![0]がブール値をtrue
返すため、どのように戻るかを説明する必要がありますか? true
では、それらはどのように等しいのでしょうか? ありがとう
3 に答える
![0]
false
すべての非null
オブジェクトが にキャストされるため、は単にtrue
です。
と を比較する[0]
とfalse
、数値に変換されます - 理由は聞かないでください。[0]
は最初に文字列に変換され(配列は区切り文字"0"
でエントリを連結することによって文字列にキャストされます)、次に数値です。は数値にキャストされ、次のようになります:は と同等であり、これは真です。,
0
false
0
[0] == ![0]
0 == 0
これを理解するには、![0]
まず式を見てください。(JS の任意のオブジェクトとして) は真の値であるfalse
と評価されます。[0]
したがって、ステートメントは次のようになります...
[0] == false
簡単になりました: (Boolean -> Number ルールの場合) にfalse
変換され、Object-To-Primitive ルールによって変換されます - 最初に(String) に、次に(Number) に変換されます。明らかに、に等しいです。)0
[0]
'0'
0
0
0
PSそして、はい、それはかなり奇妙に思えるかもしれませんが、両方...
[0] == false
... と ...
![0] == false
... に評価true
: 前者はすでに説明されていますが、後者は単にfalse == false
です。==
これらのLint 警告にまだ驚いている人はいますか? )
式を複数の部分に分割しました:
typeof([0]) // "object"
[0] == true // false
![0] == true // false
![0] == false // true
この理由は、JavaScript では値のみ1
が暗黙的に true に変換されるため、他のすべての値は false に変換されるためです。のみが偽の![0]
式を否定するため、 になり(false == false) == true
ます。