私はいくつかのJavaScriptの概念をテストしていて、その理由を理解しようとしています。
typeof({} + {})
typeof([] + [])
まだ'文字列'を返します:
typeof {}
typeof []
'オブジェクト'を返します
NodeJS、FireFox、Chrome、IE9でこれを試しましたが、すべて同じ結果になりました。
私はいくつかのJavaScriptの概念をテストしていて、その理由を理解しようとしています。
typeof({} + {})
typeof([] + [])
まだ'文字列'を返します:
typeof {}
typeof []
'オブジェクト'を返します
NodeJS、FireFox、Chrome、IE9でこれを試しましたが、すべて同じ結果になりました。
演算子は、+
文字列を連結するか、数値を追加するように定義されています。他の方法を試す場合は、最初にオペランドを文字列または数値に変換する必要があります。ここでは文字列が優先されるようです。
関数とオブジェクトをそれぞれ定義することで、何が返されるstring
かを制御できますnumber
.toString
.valueOf
+演算子を使用して、配列またはオブジェクトを連結または「追加」することはできません。
2つのオブジェクトを追加すると、それらの文字列表現が連結されます。
演算子は+
、オペランドを共通の型に強制しようとします。この場合、オブジェクトや配列を追加しても意味がないため、型は文字列です。
+
オペレーターのドキュメントから:
Type(lprim) が String または Type(rprim) が String の場合、ToString(lprim) と ToString(rprim) を連結した結果の String を返します。
オブジェクトのデフォルト値は文字列 (空のオブジェクトの場合は空の文字列) であるため、操作の戻り値は です'' + '' => ''
。
内部構造に関心がある場合は、+
演算子、ToPrimitive
、およびオブジェクトのECMAScript ドキュメントを参照してください。DefaultValue