6

私はjavascriptの初心者です。これは私を混乱させるExtJSのコードです:

supportsSort = (function() {
    var a = [1,2,3,4,5].sort(function(){ return 0; });
    return a[0] === 1 && a[1] === 2 && a[2] === 3 && a[3] === 4 && a[4] === 5;
}()),

ExtJS がこのテストを実行したい理由を教えてくれる人はいますか?

いくつかのサンプル コードを添付することをお勧めします。

4

2 に答える 2

2

確かに知識に基づいた推測をしているだけなので、これを回答として投稿するのをためらっていますが、MDNによると、ブラウザの互換性Array.sortは ECMAScript5 としてリストされており、すべてに「はい」 (実際のバージョン番号をリストするのではなく) - テストを残す実際のサポートについては、多かれ少なかれ冗長です。

変数名はおそらく少し誤解を招く可能性がありますが、実際にそれが何をしているのかを実際に追跡すると、渡された関数は;sortを返すだけだからです。0通常、配列の順序を操作するために、比較条件に応じて1orを返すことがあり-1ます。したがって、これを行うことで、配列の順序が変更されないことが予想されます。

return ステートメントは、配列がまだ最初と同じ順序であるかどうかに関する一連のブール値チェックです。おそらく、このフラグは、ブラウザ/Javascript のソート機能の実装が実際に安定したアルゴリズムsupportsSortであるかどうかを確認するために存在します。

于 2013-09-14T18:48:00.157 に答える
0

ブラウザがこの機能をサポートしているかどうかを確認するために、このテストが必要だと思います。

これについては、この投稿またはこのリンクで説明されているので、見つけることができますArray.prototype.sort([comparator])。すべてのブラウザー バージョンが並べ替え機能をサポートしているわけではないことが示されています。

最近では、この機能をサポートしていないブラウザはありません (最新バージョンについて話しています)。ただし、以前のバージョンの開発に Ext Js を使用する場合は、Ext Js が必要になります。

于 2013-09-15T06:25:16.733 に答える