国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript下string.format函數(shù)補充

2019-11-21 00:16:54
字體:
供稿:網(wǎng)友
又重新閱讀了一遍Andrew的原文,在原文下面的評論中,赫然發(fā)現(xiàn)也有人早提出參數(shù)個數(shù)的問題,同樣懶惰的樓豬直接拷貝原文評論答復了一下,同時還發(fā)現(xiàn)說漏了很重要的一個注意點Array.prototype.slice。
下面統(tǒng)一補充說明一下:

1、string.format的參數(shù)個數(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

這個留言的家伙給足了作者面子,稱“I understand it was only an example and brevety is the main objective, but its a great function to have”。原來,原文中定義的正則表達式能夠驗證的數(shù)字范圍是...原來如此啊,哈哈,樓豬心虛的笑了。

2、Array.prototype.slice
將arguments轉(zhuǎn)換成Array的方法是通過Array.prototype.slice.call(arguments);方式轉(zhuǎn)換的,也就是說類數(shù)組方式的對象都可以通過slice的方式實現(xiàn)到Array的轉(zhuǎn)換,說到類數(shù)組對象的轉(zhuǎn)換,真的很有必要重新記錄總結(jié)一下Array的原型方法slice。
(1)、常見用法
樓豬在早前的這篇里通過一段代碼一帶而過介紹過slice方法:slice(start,end):返回數(shù)組對象的一個子集,索引從start開始(包括 start),到end結(jié)束(不包括end),原有數(shù)組不受影響。其實我們可以大膽猜測slice函數(shù)內(nèi)部應(yīng)該是定義了一個數(shù)組變量,然后通過循環(huán),將數(shù)組對應(yīng)索引值push進變量,最后return這個Array變量。
(2)、“不是Array,我們也想要變成Array”
不是Array,但是有l(wèi)ength屬性,可以根據(jù)索引取值,比如本文中的arguments,我們可以通過下面的方式轉(zhuǎn)換為真實數(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?看過樓豬原文的讀者可能會覺得這都是陳詞濫調(diào),還是多說一句,在IE下,Array.prototype.slice.call(nodelist)就不是那么回事了,最后再貼一次將NodeList轉(zhuǎn)換為Array并且兼容ie和其他瀏覽器的方法結(jié)束本文:
復制代碼 代碼如下:

var nodelist =something;//一個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
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖江市| 浦城县| 九江县| 隆昌县| 海城市| 阿瓦提县| 巴楚县| 郁南县| 府谷县| 南部县| 清涧县| 武陟县| 阜阳市| 桐城市| 盱眙县| 东台市| 堆龙德庆县| 昆明市| 平果县| 闽清县| 丁青县| 东山县| 平顶山市| 珲春市| 库车县| 托克托县| 旺苍县| 米脂县| 新兴县| 宁津县| 咸宁市| 齐齐哈尔市| 西昌市| 海淀区| 郑州市| 资兴市| 海城市| 大庆市| 金门县| 翁牛特旗| 石台县|