1

私はいくつかのJavaScriptの概念をテストしていて、その理由を理解しようとしています。

typeof({} + {})
typeof([] + [])

まだ'文字列'を返します:

typeof {}
typeof []

'オブジェクト'を返します

NodeJS、FireFox、Chrome、IE9でこれを試しましたが、すべて同じ結果になりました。

4

3 に答える 3

4

演算子は、+文字列を連結するか、数値を追加するように定義されています。他の方法を試す場合は、最初にオペランドを文字列または数値に変換する必要があります。ここでは文字列が優先されるようです。

関数とオブジェクトをそれぞれ定義することで、何が返されるstringかを制御できますnumber.toString.valueOf

于 2012-11-15T14:54:28.823 に答える
1

+演算子を使用して、配列またはオブジェクトを連結または「追加」することはできません。

2つのオブジェクトを追加すると、それらの文字列表現が連結されます。

于 2012-11-15T14:53:36.633 に答える
0

演算子は+、オペランドを共通の型に強制しようとします。この場合、オブジェクトや配列を追加しても意味がないため、型は文字列です。

+オペレーターのドキュメントから:

Type(lprim) が String または Type(rprim) が String の場合、ToString(lprim) と ToString(rprim) を連結した結果の String を返します。

オブジェクトのデフォルト値は文字列 (空のオブジェクトの場合は空の文字列) であるため、操作の戻り値は です'' + '' => ''

内部構造に関心がある場合は、+演算子ToPrimitive、およびオブジェクトのECMAScript ドキュメントを参照してください。DefaultValue

于 2012-11-15T14:58:15.703 に答える