3
router.route = function (alias, pattern, action, constraints) {
   if (2 === arguments.length)
     Array.prototype.unshift.call(arguments, undefined)

   console.log(arguments)
}

router.route('/artist/:id', function () {})


{ '0': undefined,
  '1': '/artist/:id',
  '2': [Function],
  '3': undefined,
  '4': undefined,
  '5': undefined,
  '6': undefined,
  '7': undefined,
  '8': undefined,
  '9': undefined,
  '10': undefined,
  '11': undefined,
  '12': undefined,
  '13': undefined,
  '14': undefined,
  '15': undefined,
  '16': undefined,
  '17': undefined,
  '18': undefined,
  '19': undefined }

私が基本的にやろうとしているのは、「エイリアス」引数をオプションにすることですが、これを行わずにそうする方法を見つけようとしています。

if (2 === arguments.length) {
  action = pattern
  pattern = alias
  alias = undefined
}

したがって、unshift() は基本的に機能し、同じ結果が得られます。 alias = undefined pattern = '/artist/:id' action = function () {}

しかし問題は、引数配列の最後に17個の「未定義」がどこからともなく追加されていることです。

これはパフォーマンスに影響しますか?なぜそれが起こったのか誰か知っていますか?

編集

元の質問で誤って Array.prototype.unshift.call(arguments, undefined) の代わりに Array.prototype.unshift(arguments, undefined) を書きました。申し訳ありません。

4

2 に答える 2

0

リソースのタイムアウトが原因でこれらの未定義の場所がある場合は、はい、パフォーマンスに影響します。それが単なる空の配列インデックスである場合、いいえ、パフォーマンスには影響しません。

于 2012-05-23T19:18:27.443 に答える
0

私の理解が正しければ、配列の最初の要素を削除したいだけではありませんか?

もしそうなら、あなたはただすることができます:

var args = Array.prototype.shift.call(arguments); 
于 2012-05-23T19:19:14.770 に答える