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 相关文章推荐
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
Js+Jq获取URL参数的集中方法示例代码
May 20 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
JavaScript插件化开发教程 (一)
Jan 27 Javascript
jQuery 获取页面li数组并删除不在数组中的key
Aug 02 Javascript
浅谈jquery页面初始化的4种方式
Nov 27 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 Javascript
uni-app实现点赞评论功能
Nov 25 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源代码
2013/06/26 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
javascript常用方法总结
2015/05/14 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
python中update的基本使用方法详解
2019/07/17 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
九年级化学教学反思
2014/01/28 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
婚前协议书范本
2014/10/27 职场文书
语文复习计划
2015/01/19 职场文书
大学同学聚会感言
2015/07/30 职场文书