空の配列の真偽と偽との同等性に関する混乱
JavaScript では、空の配列は真であると見なされます。ただし、プリミティブ値 false と比較すると、これらも false と評価されます。この複雑な動作は、等価演算子によって実行される暗黙的な型変換が原因である可能性があります。
提供されているコード例を詳しく見てみましょう。
var arr = []; console.log('Array:', arr); if (arr) console.log("It's true!"); if (arr == false) console.log("It's false!"); if (arr && arr == false) console.log("...what??");
最初の if ステートメントは、arr が (オブジェクトであるため) 存在するかどうかを確認します。 arr は Array オブジェクトであるため、存在し、条件は true と評価されます。
ただし、2 番目の if ステートメントは、arr の値 (toString() を呼び出した後) をプリミティブ値 false と比較します。 JavaScript では、toString() で呼び出された場合、[] は空の文字列 ("") に変換され、これは (null、未定義、0 などとともに) 偽の値とみなされます。したがって、条件も false と評価されます。
3 番目の if ステートメントは、AND 演算子 (&&) を使用して前の 2 つの条件を結合します。 arr (現在は空の文字列) と arr == false (true & false) の両方が false と評価されるため、条件全体が false と評価されます。
結論として、空の配列は、それらが考慮されるという意味で真実です。オブジェクトまたは条件付きコンテキストで使用される場合、存在し、true と評価されます。ただし、プリミティブ値 false と比較すると、等価演算によって実行される暗黙的な型変換により false と評価されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3