3

Array.filter()Rhinoで使用できないのはなぜですか?

コードは次のようになります。

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);

どちらの場合も「未定義」を出力します。

4

3 に答える 3

4

Javascript配列には標準化された関数はなくfilter、標準の拡張にすぎません。 (この回答が投稿されてからわずか1か月後に公開された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;
  };
}
于 2009-11-25T16:50:14.707 に答える
4

JavaScript 1.6 を実装していない古いバージョンの Rhino を使用しています。Rhino 1.7を試してください。

于 2009-11-26T02:49:51.790 に答える
1

フィルターは標準の JavaScript ですか? 1.8以降のMozillaにのみあります(または、この参照が教えてくれます)

于 2009-11-25T16:52:06.030 に答える