42

私はよく、開発者がJavaScriptで次のような式を使用しているのを目にします。

arr = []
arr[arr.length] = "Something"
arr[arr.length] = "Another thing"

pushもっと適切ではないでしょうか?

arr = []
arr.push("Something")
arr.push("Another thing")
4

6 に答える 6

58

今年の初めに、私は実際に同じ質問をしました。新しいテストケースで更新 http://jsperf.com/array-push-vs-unshift-vs-direct-assignment/2

pushクロムでははるかに高速で、FFではほぼ同じように見えます。また、IE9ではdirectの方が高速ですが、IE10でどのように機能するかを確認したいと思います。

ほとんどの開発者は、配列の長さを設定することを想定していると思います。ほとんどのプログラミング言語の場合と同様に、直接割り当てを使用する方が高速です。しかし、JavaScriptは異なります。Javascript配列は実際には配列ではなく、他のすべてのJavaScriptオブジェクトと同じようにキー/値マップです。したがって、事前割り当ては本質的に耳が聞こえないものになります。

個人的に私は好きpushです(:

于 2013-03-27T00:47:42.153 に答える
4

それは主に習慣だと思います。

一部の開発者は、それが彼らがそれを行うために使用される方法であるという理由だけでそれを使用し、それがpush代替手段になるとは考えていません。

一部の開発者は、あるメソッドが別のメソッドよりもはるかに高速であることをかつて学び、Javascriptエンジンの最近のパフォーマンスの向上に照らしてこれをレビューしていません。

個人的にはpushよく使います。ほとんどの場合、少なくともパフォーマンスへの影響が十分に小さい場合は、パフォーマンスよりも読みやすさと保守性の方が重要です。ここの回答に投稿されたパフォーマンステストは、さまざまな方法間のパフォーマンスの違いがそれほど大きくないことを示しています。

于 2013-03-27T01:15:35.383 に答える
1

これは、ネストされたブラケットを制限する方法です。それらが十分にある場合は、どれだけあるか、またはどれだけ必要かを確認できません(後でコードを見るときに)。私は変数を使用します。1回だけカウントする必要があります。

bar = foo.length;
foo[ bar++ ] = "new item 0";
foo[ bar++ ] = "new item 1";
foo[ bar++ ] = "new item 2";
foo[ bar++ ] = "new item 3";

http://jsfiddle.net/vEUU3/

于 2013-11-25T01:44:32.427 に答える
1

オブジェクトを配列にプッシュするときに、そのオブジェクトへの参照が返されることがよくあります。例えば:

// Returns object
function createAndAdd(arr) {
  return arr[arr.length] = { id: 1 };
} 
var obj = createAndAdd(arr);

これで新しいオブジェクトが作成され、配列に追加されました。プッシュを使用した場合は、配列の長さが返されます。次のようになります。

function createAndAdd(arr) {
  var obj = { id: 1 };
  arr.push(obj);
  return obj;
}

または、特にオブジェクトが大きくなった場合はさらに醜いです。

function createAndAdd(arr) {
  return arr[arr.push({ id: 1 }) -1];
}

個人的には、即時returnステートメントを使用する関数が大好きです。シンプルで見やすくしています。質問が大好きです。質問してくれてありがとう。

于 2015-07-31T17:40:12.417 に答える
1

パフォーマンスについてではなく、少なくともそれほど大したことではないと思います...ここで本当に重要なのは、宣言型の方法と命令型の方法です。

于 2017-07-13T23:49:40.807 に答える
0

Array.prototype.pushメソッドは更新された配列の長さを返し、直接宣言は割り当てられている値を返します。これが私が目にする唯一の違いですが、私は通常、配列に新しい値を割り当てるためのより良い方法であるプッシュメソッドに関するいくつかのベストプラクティスの推奨事項を読みます。

于 2017-06-19T21:23:11.503 に答える