質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

9217閲覧

配列に値を追加するとき、Array#pushを使用するべき理由とは?

sounisi5011

総合スコア697

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2015/02/03 08:36

Airbnb JavaScript Style Guide 日本語訳

上記ページにて、配列の長さが不明な場合はArray#pushを利用するべきと書かれています。
なぜ、Array#pushを利用するべきなのでしょうか?

実行速度の点で見れば、array[array.length]の方が早い動作となります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

とりあえず、ECMAScriptの規格書にあたってみましたが(15.4.4.7)、Array#pushでの配列の変化はarray[array.length]へ代入するのとほぼ変わらないようでした。

pushのメリットを挙げていくと、

  • 一気に複数個をpushできる
  • 同じ配列名を繰り返さず、DRYに書ける
  • コードが短い

といったところでしょうか。もちろん、速度が何より重要な場面であればそっちを優先せざるを得ませんが、そうでないような場面であればコードの見た目としてはpushのほうがきれいになる、というのが自分なりの結論です。

投稿2015/02/03 09:07

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.tada

2015/02/04 01:53

私も同意見です。 特に、「同じ配列名を繰り返さず、DRYに書ける」この部分が大きいと思います。
guest

0

ベストアンサー

確証はないが、マルチスレッドで array への要素追加が発生した際に、動作に変化があるかもしれないです。

array[array.length] = val
array.length の取得の後に、別スレッドで array の長さが変化変化してしまっていると、
要素の値を上書きしてしまう可能性があるかもしれない。

array.push(val)
push() 操作が スレッドセーフになっていれば、↑ のような心配はしないですむかもしれない。

javascript の push と length で検索していて、ちょっとおもしろいページをみつけたので紹介します。

...
According to google’s javascript guidelines, you should always use index when possible as they will outperform array push.
...
With mobile devices browsers reference by index will out perform javascript array push, since most mobile devices browsers are not as powerful as an actual computer browser.
...

速度の違いも改めていろいろな環境で改めて計測をすると、どちらが本当に速いかは 一概にいえない可能性もあるのかもしれません。

投稿2015/02/07 01:33

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sounisi5011

2015/05/18 00:17

http://webtricksandtreats.com/javascript-array-push/ を見てみました。 Google翻訳に頼りながら読み進めました所、 - 現在のブラウザにおいて、Array#pushと`array[array.length]`に大きな差は無い - モバイルブラウザでは`array[array.length]`が失敗する可能性がある という趣旨の内容が書かれていると判断しました。 今まで私は、速度を重視したJavaScriptを書くようにしてきましたが、その結果動作しなくなる可能性があるという点について完全に考慮出来ていませんでした。 ありがとうございます。 ※Google翻訳に頼っているため、私の理解に誤りがあるかも知れません。その場合、指摘していただけると有難いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問