javascript下string.format函数补充


Posted in Javascript onAugust 24, 2010

又重新阅读了一遍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
Javascript 相关文章推荐
jquery 子窗口操作父窗口的代码
Sep 21 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
May 11 Javascript
js轮播图代码分享
Jul 14 Javascript
vue.js 表格分页ajax 异步加载数据
Oct 18 Javascript
jquery实现图片列表鼠标移入微动
Dec 01 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
Oct 08 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 Javascript
微信小程序页面渲染实现方法
Nov 06 Javascript
javascript下利用arguments实现string.format函数
Aug 24 #Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
Aug 24 #Javascript
js null,undefined,字符串小结
Aug 21 #Javascript
javascript中的float运算精度实例分析
Aug 21 #Javascript
Firebug入门指南(Firefox浏览器)
Aug 21 #Javascript
jquery插件之easing 动态菜单
Aug 21 #Javascript
url地址自动加#号问题说明
Aug 21 #Javascript
You might like
PHP中替换换行符的几种方法小结
2012/10/15 PHP
php笔记之:AOP的应用
2013/04/24 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python必须了解的35个关键词
2020/07/16 Python
python定义类的简单用法
2020/07/24 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
nohup的用法
2014/08/10 面试题
在求职信中如何凸显个人优势
2013/10/30 职场文书
门卫人员岗位职责
2013/12/24 职场文书
人力资源经理自我评价
2014/01/04 职场文书
八年级生物教学反思
2014/01/22 职场文书
公司年终奖分配方案
2014/06/16 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
学术研讨会主持词
2015/07/04 职场文书
环境卫生标语
2015/08/03 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
python基础之文件操作
2021/10/24 Python
Redis实现短信验证码登录的示例代码
2022/06/14 Redis