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 相关文章推荐
js form action动态修改方法
Nov 04 Javascript
精通Javascript系列之数据类型 字符串
Jun 08 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
D3.js实现折线图的方法详解
Sep 21 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
vue设置默认首页的操作
Aug 12 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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查找字符串出现次数的方法
2014/12/01 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
php防止sql注入的方法详解
2017/02/20 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Python利用IPython提高开发效率
2016/08/10 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
django 取消csrf限制的实例
2020/03/13 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
学校与家长安全责任书
2014/07/23 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL