Нет Array.filter() в Rhino?
Почему я не могу использовать Array.filter()
в носороге?
Код выглядит так:
var simple_reason = ["a", "b", "c"];
print(typeof simple_reason.filter);
var not_so_simple_reason = new Array("a", "b", "c");
print(typeof not_so_simple_reason.filter);
В обоих случаях выводится "undefined".
3 ответа
Решение
Там нет стандартизированных filter
Функция для массивов Javascript, это только расширение стандарта. (Спецификация ES5 опубликована через месяц после публикации этого ответа.) Справочная страница MDC дает пример совместимости для тех реализаций, которые ее не поддерживают...
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp*/)
{
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this)
{
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
Вы используете устаревшую версию Rhino, которая не поддерживает JavaScript 1.6. Попробуйте Rhino 1.7.
Является ли фильтр стандартным JavaScript? Это только в Mozilla начиная с 1.8 (или так эта ссылка говорит мне)