私はhttp://zero.milosz.ca/に最初のテーブルを見て、そしてなぜ、例えば、0 == []
と0 != {}
を理解したかったです。私はそれがNumber([]) == 0
とNumber({}) == NaN
であると仮定しています。しかし、その部分は恣意的と思われます。なぜ空リストが0
で、空のオブジェクトがNaN
ですか? Number(some_object)
を使用してJavascriptでNumber([])=== 0とNumber({})=== NaNはなぜですか?
答えて
は、指定されたオブジェクトの文字列表現を使用します。あなたの例については、文字列表現は、次のとおりです。
js> ({}).toString();
[object Object]
js> [].toString();
js>
'[object Object]'
は数が、空の文字列''
缶に変換できない文字列。 ThiefMasterの答えに少し詳しく説明し
しかし、なぜ空の文字列 ''''が0に変換されていますか? – tskuzzy
数字の文脈で使用されるとき、偽の値が0に変換されることはかなり一般的です。空のオブジェクトは途中で偽物ではありません。 – ThiefMaster
@tskuzzy:このように定義されているため:* "StringNumericLiteral ::: [空]のMVは0です。" *。 http://es5.github.com/#x9.3.1 –
、私はECMAScriptののspecificationsに外観を撮影した:
数に文字列を変換する場合、文法を変換するために使用されています。特に、StringNumericLiteral ::: [empty]
の数学的な値は0と定義されます。実際には、空白は0です。
を参照してください。PDFでこれを検索するのが面倒な人のために、http://es5.github.com/#x9.3.1は、仕様。 – ThiefMaster
ありがとう、私は公式HTMLバージョンとのリンクを更新しました。 – tskuzzy
一方の値がオブジェクト([]、{})で、もう一方が数値または文字列の場合、演算子==は組み込みの変換方法を使用してオブジェクトをプリミティブ値(この場合は数値)に変換しますこれはJavaScriptですべてのオブジェクト継承:のtoString()とのvalueOf()。 {}のような一般的なオブジェクトの場合
、のvalueOfが使用され、デフォルトでは、のtoStringが使用され、内蔵アレイの場合!= 0
であり、オブジェクト自体を返します。このメソッドを配列に適用すると、すべての要素がカンマで結合された文字列が返されます。空の配列の場合、空の文字列 ''を返します。
その後、インタプリタがその文字列にのvalueOfを適用します。このメソッドの空の文字列の戻り値は0なので、[] == 0となります。
- 1. Typescript:なぜ配列<number>は[number、number、number]と同じですか?
- 2. number validaiton - javascript regex
- 3. D3 y(number)がNaNを返します
- 4. Javascript Do Number to Double
- 5. .attr( "data-number"、num_to_string)と.data( 'number')を組み合わせて使用しているのはなぜですか?
- 6. NumberがBase64.encodeToString(data、number)の意味は何ですか?
- 7. Java Numberデータ型がオーバーフローするのはなぜですか?
- 8. なぜAmazonDynamoDB :: TYPE_STRINGまたはNUMBERですか?
- 9. javascriptのNumberとFunction.prototypeの関係は何ですか?
- 10. 変更post.php?post = 0 number to title
- 11. PEP 3141では、Numberにaddメソッドがないのはなぜですか?
- 12. SqlExceptionがスローされ、プロパティNumber == 0が可能ですか?
- 13. ionic + number with variable numberは常に '有効な数字ではありません'
- 14. core.logicのnatural-numberでrun *が動作しないのはなぜですか?
- 15. 番号#number#numberはFreeMarkerのログエラーで何を識別しますか?
- 16. Numberクラスの目的は何ですか?
- 17. Sass number precisionとwebpack
- 18. なぜdatetimepickerはnumberではなくmonthの名前を付けますか?
- 19. pythonでnumberを検証する方法は0より大きいですか?
- 20. Classic JS Prime Number
- 21. Cプログラミング "Number Reverse"
- 22. なぜJavaScriptでは '3 instanceof Number' == falseですが、 '3..method()'はNumber.prototype.methodを呼び出しますか?
- 23. コンストラクタBigDecimal(Number)が未定義になるのはなぜですか?
- 24. html5 type = "number" slowing
- 25. なぜ入力値にnumber()を使用できないのですか?
- 26. isEven(-number);を返します。 Ellquent javascript
- 27. 誰かがこの番号= 80を説明することはできますか? number =(int)math.sqrt(number ++);ナンバー= 8?
- 28. Int numberをDouble numberに変換する方法は?
- 29. はStringまたはNumber関数です
- 30. フォーマット後にNUMBER列に####が表示されるのはなぜですか?Oracle?
配列が奇妙です。 '[[[[[[123]]]]]]] == 123'のように。 –
@Kolink ...しかし、これが動作する原因は何ですか? (何のルール '=='、 '===、適用されている'では見られない?) –
@Kolink:あなたは*その*奇妙な呼び出し? [+] [+] [+] [+] [+] [+] [+] [+] [+] [ [+] [+] [+] [+] [+] [+] [+] [!] === '失敗'](http://wtfjs.com/2010/07/) – ThiefMaster