0
filter    Creates a new array with all elements that pass
          the test implemented by the provided function.

>>> 'abc'.filter(function(e){return e!='b'})
TypeError: "abc".filter is not a function

>>> Array.prototype.filter.call('abc', function(e){return e!='b'})
["a", "c"]

>>> jQuery.isArray('abc')
false
4

2 に答える 2

4

すべての配列メソッドはジェネリックです。つまり、数値プロパティとプロパティを持つ任意のオブジェクトで機能しますlengthたとえば、の仕様をArray.prototype.filter参照してください。アルゴリズムは、次のような観点から完全に表現されていることに注意してください。

引数を使用しての内部メソッドをlenValue呼び出した結果とします。[[Get]]O"length"

また

with引数の内部メソッドをkPresent呼び出した結果とします。[[HasProperty]]OPk


Array.filterFirefox固有の拡張機能です。クロスブラウザのバージョンはArray.prototype.filter.callです。

于 2012-04-15T03:27:15.117 に答える
1

Array.filter1はジェネリックとして定義されているため、これを行うことができます。NodeListたとえば、sで呼び出すことができます。これは開発者にとって便利なことです。最近のブラウザ(IE 8以前を除くすべて)では、配列のインデックスと同じように文字列内の文字にアクセスできるため、文字列でも機能します。これは、以下filterに基づいていlengthます。

var str = "Hello, world!";

str[2] // 'l'

ただし、Internet Explorer 8以前のサポートを計画している場合は、この機能を使用することはお勧めしません。ES5shivは、コンテキストが文字列であるという事実を検出しない可能性があり、問題が発生する可能性があります。

1そして他のすべてのArray方法。繰り返しになりますが、InternetExplorer8以前を除きます。

于 2012-04-15T03:28:33.033 に答える