javascript下string.format函数补充_javascript技巧

又重新阅读了一遍Andrew的原文,在原文下面的评论中,赫然发现也有人早提出参数个数的问题,同样懒惰的楼猪直接拷贝原文评论答复了一下,同时还发现说漏了很重要的一个注意点Array.prototype.slice。
下面统一补充说明一下:

1、string.format的参数个数
在Andrew的原文中,已经有人指出:

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”。原来,原文中定义的正则表达式能够验证的数字范围是...原来如此啊,哈哈,楼猪心虚的笑了。

2、Array.prototype.slice
将arguments转换成Array的方法是通过Array.prototype.slice.call(arguments);方式转换的,也就是说类数组方式的对象都可以通过slice的方式实现到Array的转换,说到类数组对象的转换,真的很有必要重新记录总结一下Array的原型方法slice。
(1)、常见用法
楼猪在早前的这篇里通过一段代码一带而过介绍过slice方法:slice(start,end):返回数组对象的一个子集,索引从start开始(包括 start),到end结束(不包括end),原有数组不受影响。其实我们可以大胆猜测slice函数内部应该是定义了一个数组变量,然后通过循环,将数组对应索引值push进变量,最后return这个Array变量。
(2)、“不是Array,我们也想要变成Array”
不是Array,但是有length属性,可以根据索引取值,比如本文中的arguments,我们可以通过下面的方式转换为真实数组:

复制代码 代码如下:

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转换成Array?看过楼猪原文的读者可能会觉得这都是陈词滥调,还是多说一句,在IE下,Array.prototype.slice.call(nodelist)就不是那么回事了,最后再贴一次将NodeList转换为Array并且兼容ie和其他浏览器的方法结束本文:

复制代码 代码如下:

var nodelist =something;//一个NodeList变量
var arr = null; //数组
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

时间: 2024-09-14 03:15:23

javascript下string.format函数补充_javascript技巧的相关文章

js中的string.format函数代码_javascript技巧

源于C#中的string.Format() 复制代码 代码如下: String.prototype.format = function(args) { if (arguments.length>0) { var result = this; if (arguments.length == 1 && typeof (args) == "object") { for (var key in args) { var reg=new RegExp ("({&qu

javascript最基本的函数汇总_javascript技巧

我记得早期的 JavaScript ,要完成任何事情几乎都绕不开一些简单的函数,因为浏览器提供商实现功能有所差异,而且不只是边缘功能,基础功能也一样,如 addEventListener 和 attachEvent.虽然时代变了,但仍有一些函数是每个开发者都应该掌握的,以便于完成某些功能和提高性能. debounce 对于高耗能事件,debounce 函数是一种不错解决方案.如果你不对 scroll.resize.和 key* 事件使用 debounce  函数,那么你几乎等同于犯了错误.下面的

JavaScript中String.prototype用法实例_javascript技巧

本文实例讲述了JavaScript中String.prototype用法.分享给大家供大家参考.具体如下: // 返回字符的长度,一个中文算2个 String.prototype.ChineseLength=function() { return this.replace(/[^\x00-\xff]/g,"**").length; } // 判断字符串是否以指定的字符串结束 String.prototype.EndsWith = function(str) { return this.

JavaScript实现的CRC32函数示例_javascript技巧

本文实例讲述了JavaScript实现的CRC32函数.分享给大家供大家参考,具体如下: 简介: CRC的全称是循环冗余校验.可用于验证数据的完整性. javascript实现代码如下: (function() { var table = "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B

详解JavaScript中常用的函数类型_javascript技巧

网页中的java代码需要写在JavaScript中,里面部分少不了函数,介绍一下JavaScript中常用的函数类型.1.可变函数 <script> function show(){ alert("第一个..."); } function show(str){ alert("第二个"); } function show(a,b){ alert("第三个..."); alert(a+":"+b); } </sc

javascript学习笔记之函数定义_javascript技巧

函数声明式 function funname( 参数 ){ ...执行的代码 } 声明式的函数并不会马上执行,需要我们调用才会执行:funname();  * 分号是用来分隔可执行JavaScript语句,由于函数声明不是一个可执行语句,所以不以分号结束. 函数表达式 var x = function( 参数 ){ ...执行的代码块 }; 函数表达式定义的函数,实际上也是一个匿名函数(这个函数没有名字,直接存储在变量中)  * 函数表达式结尾是要加分号的,因为它是一个执行语句. Functio

从jQuery.camelCase()学习string.replace() 函数学习_javascript技巧

功能 camelCase函数的功能就是将形如background-color转化为驼峰表示法:backgroundColor. 此函数在jQuery的data函数,以及涉及到css的诸多函数中都有用到. jQuery的实现 复制代码 代码如下: //正则匹配 rdashAlpha = /-([a-z])/ig, // camelCase替换字符串时的回调函数 fcamelCase = function( all, letter ) { return letter.toUpperCase(); }

JavaScript日期时间格式化函数分享_javascript技巧

这个函数经常用到,分享给大家. 函数代码: 复制代码 代码如下: Date.prototype.format = function(format){    var o = {    "M+" : this.getMonth()+1, //month    "d+" : this.getDate(),    //day    "h+" : this.getHours(),   //hour    "m+" : this.getM

Javascript将string类型转换int类型_javascript技巧

郁闷的事来了,先看前台HTML: 复制代码 代码如下: 购买数量: <input id="txtNum" type="text" value="1" runat="server" onchange="javascript:checkNum();" /> 件(库存<span id="getGoodsNum"> <%=GOODSNUM%></span