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"

或者

kPresent是调用with argument的[[HasProperty]]内部方法的结果。OPk


Array.filter一个 Firefox 特定的扩展,顺便说一句。跨浏览器版本是Array.prototype.filter.call.

于 2012-04-15T03:27:15.117 回答
1

您可以这样做,因为Array.filter1被定义为泛型;例如,您可以在NodeLists 上调用它。这只是对开发者的一种方便。它也适用于字符串,因为在现代浏览器(除了 IE 8 和更早版本)中,您可以像访问数组索引一样访问字符串中的字符,这filter就是基于以下内容的内容length

var str = "Hello, world!";

str[2] // 'l'

但是,如果您计划支持 Internet Explorer 8 或更早版本,我不建议使用此功能,因为 ES5 shiv 可能不会检测到上下文是字符串的事实,这会破坏事情。

1以及所有其他Array方法。再次,在 Internet Explorer 8 和更早版本上除外。

于 2012-04-15T03:28:33.033 回答