ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルに基づく補足の string.format 関数

javascript_javascript スキルに基づく補足の string.format 関数

WBOY
WBOYオリジナル
2016-05-16 18:20:56846ブラウズ

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)、「配列ではありません。私たちも配列になりたいのです。」
これは配列ではありませんが、引数などのインデックスに基づいて値を評価できる長さ属性があります。この記事の配列は実数配列に変換できます:



関数 test() {
var args = Array.prototype.slice.call(arguments);
alert(args.length); // Push
args.push("wong ");
alert(args.length); //2
alert(args.pop()); //pop
alert(args.length); ; //1
}
test();


プッシュメソッドとポップメソッドの両方が機能することがわかります。同様に、Nodelist にも同様の機能があります。 NodeList を Array に変換するにはどうすればよいですか? Louzhu の元の記事を読んだ読者は、これはすべて決まり文句だと思うかもしれませんが、IE では Array.prototype.slice.call(nodelist) は当てはまりません。最後に、NodeList の変換について再度投稿します。そして、IE および他のブラウザと互換性のある方法でこの記事は終了します:


コードをコピー コードは次のとおりです。 var nodelist =something;//NodeList 変数
var arr = null; //Array
try { //ie
arr = new Array(); >for (var i = 0; i arr.push(nodelist[i])
}
} catch (e) {//その他のブラウザ
arr = Array.prototype.slice .call(nodelist);


著者: Jeff Wong
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。