javascript下string.format函數(shù)補(bǔ)充
更新時(shí)間:2010年08月24日 02:11:24 作者:
在上一篇中,自謙懶人的咚鏘留言指出樓豬改寫(xiě)的format函數(shù)在參數(shù)輸入11個(gè)后不起作用了
又重新閱讀了一遍Andrew的原文,在原文下面的評(píng)論中,赫然發(fā)現(xiàn)也有人早提出參數(shù)個(gè)數(shù)的問(wèn)題,同樣懶惰的樓豬直接拷貝原文評(píng)論答復(fù)了一下,同時(shí)還發(fā)現(xiàn)說(shuō)漏了很重要的一個(gè)注意點(diǎn)Array.prototype.slice。
下面統(tǒng)一補(bǔ)充說(shuō)明一下:
1、string.format的參數(shù)個(gè)數(shù)
在Andrew的原文中,已經(jīng)有人指出:
eric d. Hi, thanks for that brilliant article. Made a lot of things a lot clearer!
Note: new RegExp("%([1-" + arguments.length + "])", "g"); will fail passed 9 arguments (the regexp would be "%([1-10])" so it will only match %0 and %1).
I think an easy fix would be something like:
function format(string) { var args = arguments; var pattern = new RegExp("%([0-9]+)", "g"); return String(string).replace(pattern, function(match, index) { if (index == 0 || index >= args.length) throw "Invalid index in format string"; return args[index]; }); };
(Sorry for nitpicking, I understand it was only an example and brevety is the main objective, but its a great function to have)
Posted on: January 20th 2009, 12:01 am
這個(gè)留言的家伙給足了作者面子,稱“I understand it was only an example and brevety is the main objective, but its a great function to have”。原來(lái),原文中定義的正則表達(dá)式能夠驗(yàn)證的數(shù)字范圍是...原來(lái)如此啊,哈哈,樓豬心虛的笑了。
2、Array.prototype.slice
將arguments轉(zhuǎn)換成Array的方法是通過(guò)Array.prototype.slice.call(arguments);方式轉(zhuǎn)換的,也就是說(shuō)類數(shù)組方式的對(duì)象都可以通過(guò)slice的方式實(shí)現(xiàn)到Array的轉(zhuǎn)換,說(shuō)到類數(shù)組對(duì)象的轉(zhuǎn)換,真的很有必要重新記錄總結(jié)一下Array的原型方法slice。
(1)、常見(jiàn)用法
樓豬在早前的這篇里通過(guò)一段代碼一帶而過(guò)介紹過(guò)slice方法:slice(start,end):返回?cái)?shù)組對(duì)象的一個(gè)子集,索引從start開(kāi)始(包括 start),到end結(jié)束(不包括end),原有數(shù)組不受影響。其實(shí)我們可以大膽猜測(cè)slice函數(shù)內(nèi)部應(yīng)該是定義了一個(gè)數(shù)組變量,然后通過(guò)循環(huán),將數(shù)組對(duì)應(yīng)索引值push進(jìn)變量,最后return這個(gè)Array變量。
(2)、“不是Array,我們也想要變成Array”
不是Array,但是有l(wèi)ength屬性,可以根據(jù)索引取值,比如本文中的arguments,我們可以通過(guò)下面的方式轉(zhuǎn)換為真實(shí)數(shù)組:
function test() {
var args = Array.prototype.slice.call(arguments);
alert(args.length);
args.push("jeff"); //push
args.push("wong");
alert(args.length); //2
alert(args.pop()); //pop
alert(args.length); //1
}
test();
我們看到push和pop方法都起作用了。同樣,Nodelist也有類似特性。怎么樣將NodeList轉(zhuǎn)換成Array?看過(guò)樓豬原文的讀者可能會(huì)覺(jué)得這都是陳詞濫調(diào),還是多說(shuō)一句,在IE下,Array.prototype.slice.call(nodelist)就不是那么回事了,最后再貼一次將NodeList轉(zhuǎn)換為Array并且兼容ie和其他瀏覽器的方法結(jié)束本文:
var nodelist =something;//一個(gè)NodeList變量
var arr = null; //數(shù)組
try { //ie
arr = new Array();
for (var i = 0; i < nodelist.length; i++) {
arr.push(nodelist[i]);
}
} catch (e) {//其他瀏覽器
arr = Array.prototype.slice.call(nodelist);
}
作者:Jeff Wong
下面統(tǒng)一補(bǔ)充說(shuō)明一下:
1、string.format的參數(shù)個(gè)數(shù)
在Andrew的原文中,已經(jīng)有人指出:
eric d. Hi, thanks for that brilliant article. Made a lot of things a lot clearer!
Note: new RegExp("%([1-" + arguments.length + "])", "g"); will fail passed 9 arguments (the regexp would be "%([1-10])" so it will only match %0 and %1).
I think an easy fix would be something like:
function format(string) { var args = arguments; var pattern = new RegExp("%([0-9]+)", "g"); return String(string).replace(pattern, function(match, index) { if (index == 0 || index >= args.length) throw "Invalid index in format string"; return args[index]; }); };
(Sorry for nitpicking, I understand it was only an example and brevety is the main objective, but its a great function to have)
Posted on: January 20th 2009, 12:01 am
這個(gè)留言的家伙給足了作者面子,稱“I understand it was only an example and brevety is the main objective, but its a great function to have”。原來(lái),原文中定義的正則表達(dá)式能夠驗(yàn)證的數(shù)字范圍是...原來(lái)如此啊,哈哈,樓豬心虛的笑了。
2、Array.prototype.slice
將arguments轉(zhuǎn)換成Array的方法是通過(guò)Array.prototype.slice.call(arguments);方式轉(zhuǎn)換的,也就是說(shuō)類數(shù)組方式的對(duì)象都可以通過(guò)slice的方式實(shí)現(xiàn)到Array的轉(zhuǎn)換,說(shuō)到類數(shù)組對(duì)象的轉(zhuǎn)換,真的很有必要重新記錄總結(jié)一下Array的原型方法slice。
(1)、常見(jiàn)用法
樓豬在早前的這篇里通過(guò)一段代碼一帶而過(guò)介紹過(guò)slice方法:slice(start,end):返回?cái)?shù)組對(duì)象的一個(gè)子集,索引從start開(kāi)始(包括 start),到end結(jié)束(不包括end),原有數(shù)組不受影響。其實(shí)我們可以大膽猜測(cè)slice函數(shù)內(nèi)部應(yīng)該是定義了一個(gè)數(shù)組變量,然后通過(guò)循環(huán),將數(shù)組對(duì)應(yīng)索引值push進(jìn)變量,最后return這個(gè)Array變量。
(2)、“不是Array,我們也想要變成Array”
不是Array,但是有l(wèi)ength屬性,可以根據(jù)索引取值,比如本文中的arguments,我們可以通過(guò)下面的方式轉(zhuǎn)換為真實(shí)數(shù)組:
復(fù)制代碼 代碼如下:
function test() {
var args = Array.prototype.slice.call(arguments);
alert(args.length);
args.push("jeff"); //push
args.push("wong");
alert(args.length); //2
alert(args.pop()); //pop
alert(args.length); //1
}
test();
我們看到push和pop方法都起作用了。同樣,Nodelist也有類似特性。怎么樣將NodeList轉(zhuǎn)換成Array?看過(guò)樓豬原文的讀者可能會(huì)覺(jué)得這都是陳詞濫調(diào),還是多說(shuō)一句,在IE下,Array.prototype.slice.call(nodelist)就不是那么回事了,最后再貼一次將NodeList轉(zhuǎn)換為Array并且兼容ie和其他瀏覽器的方法結(jié)束本文:
復(fù)制代碼 代碼如下:
var nodelist =something;//一個(gè)NodeList變量
var arr = null; //數(shù)組
try { //ie
arr = new Array();
for (var i = 0; i < nodelist.length; i++) {
arr.push(nodelist[i]);
}
} catch (e) {//其他瀏覽器
arr = Array.prototype.slice.call(nodelist);
}
作者:Jeff Wong
您可能感興趣的文章:
- Java字符串格式化功能?String.format用法詳解
- Java String.format()的用法
- Java之String.format()方法案例講解
- 快速入門(mén)介紹Java中強(qiáng)大的String.format()
- Java中String.format的使用方法總結(jié)
- JavaScript實(shí)現(xiàn)格式化字符串函數(shù)String.format
- JAVA字符串格式化-String.format()的使用
- String.Format大全(C# Java)
- C#中string.format用法詳解
- javascript模擬實(shí)現(xiàn)C# String.format函數(shù)功能代碼
- js中的string.format函數(shù)代碼
- javascript下利用arguments實(shí)現(xiàn)string.format函數(shù)
- asp.net String.format中大括號(hào)的加入方法
- 為javascript添加String.Format方法
相關(guān)文章
js調(diào)用webservice中的方法實(shí)現(xiàn)思路及代碼
js調(diào)用webservice還算是一個(gè)比較實(shí)用的功能,本文提供了實(shí)現(xiàn)思路及代碼,感興趣的你可不要錯(cuò)過(guò)了哈,希望本文可以幫助到你啊2013-02-02
js調(diào)用activeX獲取u盤(pán)序列號(hào)的代碼
js調(diào)用activeX獲取u盤(pán)序列號(hào)的代碼,需要的朋友可以參考下。2011-11-11
JavaScript中call和apply方法的區(qū)別實(shí)例分析
這篇文章主要介紹了JavaScript中call和apply方法的區(qū)別,結(jié)合實(shí)例形式分析call和apply方法的功能、原理及相關(guān)使用操作區(qū)別,需要的朋友可以參考下2018-08-08
javascript運(yùn)動(dòng)效果實(shí)例總結(jié)(放大縮小、滑動(dòng)淡入、滾動(dòng))
這篇文章主要介紹了javascript運(yùn)動(dòng)效果,結(jié)合實(shí)例形式總結(jié)分析JavaScript實(shí)現(xiàn)放大縮小、滑動(dòng)淡入、滾動(dòng)等效果的方法,需要的朋友可以參考下2016-01-01
JavaScript時(shí)間對(duì)象之常用方法的設(shè)置實(shí)例
這篇文章主要為大家介紹了JavaScript時(shí)間對(duì)象常用方法的設(shè)置實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
微信小程序--特定區(qū)域滾動(dòng)到頂部時(shí)固定的方法
這篇文章主要介紹了微信小程序--特定區(qū)域滾動(dòng)到頂部時(shí)固定的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

