[解決済み] JavaScriptで[1,2] + [3,4] = "1,23,4 "になるのはなぜですか?
質問
ある配列の要素を別の配列に追加したいので、次のようにしてみました。
[1,2] + [3,4]
と反応した。
"1,23,4"
どうしたんですか?
どうすればいい?
その
+
演算子
は配列に対して定義されていません。
.
何が起こるかというと、Javascriptが 配列を文字列に変換する を作成し、それを連結する。
更新情報
この質問と私の回答は多くの注目を浴びているので、私は、この質問と私の回答が役に立つと思ったし、関連性があると思った。
概要
がどのようなものなのかについて
+
演算子の挙動も一般的です。
では、ここからが本題です。
E4Xや実装固有のものを除くと、(ES5時点の)Javascriptには 6 組み込み データ型 :
- 未定義
- Null
- ブーリアン
- 数値
- 文字列
- オブジェクト
ただし
typeof
は、やや紛らわしいことに
object
をNullに、そして
function
を呼び出し可能なObjectとして使用する場合、Nullは実際にはObjectではなく、厳密に言えば、仕様に準拠したJavascriptの実装では、すべての関数がObjectであると見なされるのです。
そうなんです、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に適用されます。他のブラウザやバージョンの確認は、読者の方の練習として残しておきます。
注意
で指摘されているように
CMS
のようなオブジェクトの特定のケースについては
Number
,
Boolean
と、カスタムなものは
+
演算子は必ずしも文字列の結果を生成するとは限りません。オブジェクトからプリミティブへの変換の実装によって異なることがあります。例えば
var o = { valueOf:function () { return 4; } };
評価
o + 2;
プロデュース
6
, a
number
を評価する。
o + '2'
が生成されます。
'42'
, a
string
.
概要表がどのように生成されたかを見るには、以下をご覧ください。 http://jsfiddle.net/1obxuc7m/
関連
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] バイトを文字列に変換する
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
jq は html ページとデータを動的に分割する。