私はこれを見つけたときにjQueryソースを勉強していました(v1.5行2295):
_namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
_
私の質問は、なぜここでslice(0)
を使用するのですか?
sort()
は、呼び出された配列を変更します-そして、他のコードが依存する可能性のあるものを変更するのはあまり良いことではありません。
slice()
は常に新しい配列を返します-slice(0)
によって返される配列は入力と同一です。これは基本的に、配列を複製する安価な方法であることを意味します。
arr.slice(0)
は、インデックス0の要素から最後の要素までのスライスを取得して、元の配列のコピーを作成します。
また、配列のようなオブジェクトを配列に変換するためにも使用されます。たとえば、DOM NodeList
( getElementsByTagName
などのいくつかのDOMメソッドによって返される)は配列ではありませんが、配列- length
フィールドを持つオブジェクトと同様に、JavaScriptでインデックス付け可能です。それを配列に変換するために、しばしば以下を使用します:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
slice(0)は、元の配列と同一の新しい配列を作成します。多くの場合、元のアレイを保持して新しいアレイを作成します。
Slice(1)を使用すると、インデックス位置1から異なる配列が作成されます。
同様のことが文字列にも当てはまります。
slice(0)
を使用すると、参照している既存の配列(この場合は名前空間)の配列を返すことができます。
@Anonが言ったことに加えて:
slice()
メソッドは、指定された開始引数で始まる要素を選択し、指定された終了引数で終了しますが、含まれません。
例1:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);
柑橘類の結果は次のようになります。
Orange,Lemon
例2:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);
柑橘類の結果は次のようになります。
Lemon,Apple
詳細は こちら をご覧ください。