16

第一部:

2 つの配列を追加すると、すべてが期待どおりに機能するためです。

 [] + []     //output:''

配列とオブジェクトを追加することも、期待どおりです。

 [] + {}
output:'[object Object]'

{} + {}JavaScript ではNaN?
これは予想外の結果ですが、この背後にある理由は何ですか?

第2部:

プレフィックス 0 のない文字列比較では、3 は 12 より大きい:

"3" > "12"
: true

パディングを使用すると、すべてが正しく機能します。

 "03" > "12"
: false

プレフィックス 0 は文字列比較に必須ですか?プレフィックス 0 を追加する理由は何ですか?

4

3 に答える 3

14
  1. {} + {}は、空のブロック{}の後に式 が続くものとして解釈されます+ {}{}には数値がないので、 が得られNaNます。のような式として強制的に評価されるよう({} + {})にすると、 が得られます[object Object][object Object]

  2. これらは文字列なので、辞書式に比較されます。それらを数値として比較する場合は、最初にparseIntまたはを使用して解析しますparseFloat

于 2013-04-14T06:17:03.083 に答える
12

最初の部分

1-

2 つの配列を追加すると、それぞれのプリミティブ値が取得され、配列は次のように文字列に変換できる[1,2,3,4].toString() //=> 1,2,3,4ため、2 つの空の配列は空の文字列に生成され、それらを連結すると空の文字列が生成されます。

2-オブジェクトに空の文字列を追加すると、オブジェクトが文字列に変換され、示されているように、オブジェクトの文字列値は次のようになります。[object Object]

3-

2 つのオブジェクトを追加すると、示されている方法で、この質問+をチェックしてオブジェクトを数値に変換するだけです

パート2

文字列の比較は左から右に文字ごとに行われ、差異があるとすぐに、次のように文字列の長さを無視して戻り値が決定されます

"3" > "12"

ASCII の「3」は「1」よりも大きいため、TRUE が返されます。

"03" > "12"

ASCII の "0" は "1" より小さいため、False が返されます

于 2013-04-14T06:27:58.557 に答える
0

最新の Firefox、Safari、および Chrome で次のことを試しました。b={};console.log(a+a);console.log(a+b);console.log(b+b);

ファイアフォックス

(an empty string)
[object Object]
[object Object][object Object]

クロム

[object Object]
[object Object][object Object]
undefined   

サファリ

[object Object]
[object Object][object Object]

文字列 "3" は、文字列 "12" よりも辞書編集的に大きいです。本当に文字列を数値として比較したい場合は、そのようにしたい方法を JavaScript に指示する必要があります。

parseInt("3") > parseInt("12");
于 2013-04-14T06:41:06.517 に答える