Andrew の元の記事をもう一度読み直してみたところ、元の記事の下にあるコメントで、同じく怠惰な Lou Zhu がすでに元の記事をそのままコピーして返信していることに気づきました。また、Array.prototype.slice に注意すべき点が 1 つありました。
以下は統一的な説明です:
1. string.format のパラメータの数
Andrew の原文では、すでに誰かが指摘しています:
eric d. こんにちは、素晴らしい記事をありがとう。
注: new RegExp("%([1-" argument.length "])", "g"); 9 個の引数を渡すと失敗します (正規表現は "%([1-10])" になるため、%0 と %1 のみに一致します)。
簡単な修正は次のようなものになると思います。 >関数形式 (文字列) { var args = 引数; var pattern = new RegExp("%([0-9] )", "g"); return String(string).replace(pattern, function(match,index) { if (インデックス == 0 || インデックス >= args.length) throw "フォーマット文字列のインデックスが無効です"; return args[index] });例と簡潔さが主な目的ですが、これは素晴らしい機能です)
投稿日: 2009 年 1 月 20 日、午前 12:01
メッセージを残した男性は作者に十分な情報を提供しました「これは単なる一例であり、簡潔さが主な目的であることは理解していますが、これは素晴らしい機能です。」元の記事で定義されている正規表現で検証できる数値の範囲は…ということで、ははは、ルー・ジューは罪悪感を持って微笑んだ。
2. Array.prototype.slice
引数を Array に変換するメソッドは Array.prototype.slice.call(arguments);、つまりクラスを使用します。配列オブジェクトはスライスを通じて Array に変換できます。配列のようなオブジェクトの変換に関しては、Array のプロトタイプ メソッドのスライスを再記録して要約する必要があります。
(1)、一般的な使用法 Lou Zhu は、以前の記事でコードの一部を使用してスライス メソッドを紹介しました。slice(start, end): 配列オブジェクトのサブセットを返します。インデックスは start から始まります Start ( start を含む) と end at end (end を除く) は影響を受けません。実際、配列変数はスライス関数内で定義され、ループを通じて配列の対応するインデックス値が変数にプッシュされ、最終的に配列変数が返されると大胆に推測できます。
(2)、「配列ではありません。私たちも配列になりたいのです。」
これは配列ではありませんが、引数などのインデックスに基づいて値を評価できる長さ属性があります。この記事の配列は実数配列に変換できます: