配列の要素を別の配列に追加したかったので、これを試しました。
[1,2] + [3,4]
次のように返答しました。
"1,23,4"
何が起こっているのか?
ベストアンサー1
配列に対して演算子は定義されていませ+
ん。
何が起こるかというと、Javascript は配列を文字列に変換し、それらを連結します。
アップデート
この質問とそれに伴う私の回答は多くの注目を集めているので、オペレーターが一般的にどのように動作するかについても概要を+
把握しておくことは有益かつ関連性があると感じました。
では、始めましょう。
E4Xと実装固有のものを除いて、JavaScript(ES5時点)には6つの組み込み関数があります。データ型:
- 未定義
- ヌル
- ブール
- 番号
- 弦
- 物体
ただし、typeof
やや混乱しながら戻ってくる object
Null およびfunction
呼び出し可能なオブジェクトの場合、Null は実際にはオブジェクトではなく、厳密に言えば、仕様に準拠した JavaScript 実装ではすべての関数がオブジェクトであると見なされます。
そうです - Javascript にはプリミティブ配列そのものはなくArray
、苦痛を軽減するための構文糖で呼び出されるオブジェクトのインスタンスだけがあります。
さらに混乱を招くのは、、、などのラッパー エンティティはnew Number(5)
すべてnew Boolean(true)
型new String("abc")
でありobject
、予想されるような数値、ブール値、または文字列ではないことです。ただし、算術演算子Number
と はBoolean
数値として動作します。
簡単でしょう? ここまでで、概要自体に進むことができます。
+
オペランドの型による異なる結果の型
|| undefined | null | boolean | number | string | object |
=========================================================================
undefined || number | number | number | number | string | string |
null || number | number | number | number | string | string |
boolean || number | number | number | number | string | string |
number || number | number | number | number | string | string |
string || string | string | string | string | string | string |
object || string | string | string | string | string | string |
* Chrome13、FF6、Opera11、IE9 に適用されます。他のブラウザとバージョンの確認は読者の課題として残しておきます。
注:指摘されているようにコンテンツ管理システムNumber
、などの特定のオブジェクトやBoolean
カスタムのオブジェクトの場合、+
演算子は必ずしも文字列の結果を生成するわけではありません。オブジェクトからプリミティブへの変換の実装によって異なる場合があります。たとえばvar o = { valueOf:function () { return 4; } };
、を評価すると、 ao + 2;
が生成され、を評価すると、 aが生成されます。6
number
o + '2'
'42'
string
概要表がどのように生成されたかを確認するには、http://jsfiddle.net/1obxuc7m/