12

http://zero.milosz.ca/の最初のテーブルを見ていて、その理由を理解したいと思っていまし0 == []0 != {}。と のせいだNumber([]) == 0と思いNumber({}) == NaNます。しかし、その部分は恣意的なようです。空のリスト0と空のオブジェクトが であるのはなぜNaNですか?

4

3 に答える 3

16

UsingNumber(some_object)は、指定されたオブジェクトの文字列表現を使用します。あなたの例では、文字列表現は次のとおりです。

js> ({}).toString();
[object Object]
js> [].toString();

js>

文字列'[object Object]'は数値に変換できませんが、空の文字列は変換''できます。

于 2012-06-21T18:43:45.497 に答える
9

ThiefMaster の回答について少し詳しく説明するために、ECMAScript の仕様を調べました。

文字列を数値に変換する場合、変換には文法が使用されます。特に、 の数学的な値はStringNumericLiteral ::: [empty]0 と定義されています。実際、空白の場合は 0 です。

于 2012-06-21T18:50:20.993 に答える
2

一方の値がオブジェクト ([],{}) で、もう一方の値が数値または文字列の場合、演算子 == は組み込みの変換メソッドを使用してオブジェクトをプリミティブ値 (この場合は数値) に変換します。 Javascript 継承: toString()およびvalueOf()

{} のような一般的なオブジェクトの場合、valueOfが使用され、デフォルトではオブジェクト自体 (!= 0) が返されます。

組み込み配列の場合、toStringが使用されます。このメソッドを配列に適用すると、コンマで結合されたすべての要素を含む文字列が返されます。空の配列の場合、空の文字列 '' を返します。

次に、インタープリターはその文字列にvalueOfを適用します。空の文字列に対するこのメソッドの戻り値は 0 であるため、[] == 0 です。

于 2012-06-28T09:12:56.960 に答える