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实现文本框数量加减功能的例子分享
May 10 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
javaScript基础语法介绍
Feb 28 Javascript
jQuery.parseHTML() 函数详解
Jan 09 Javascript
Javascript实现信息滚动效果
May 18 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
Sep 22 Javascript
详解TypeScript的基础类型
Feb 18 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
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Python 爬虫性能相关总结
2020/08/03 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
高中生活自我鉴定
2014/01/18 职场文书
大学生创业策划书
2014/02/02 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL