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中的包装类型介绍
Apr 02 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
浅谈vue2 单页面如何设置网页title
Nov 08 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
浅谈 Vue 项目优化的方法
Dec 16 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
返回上一个url并刷新界面的js代码
Sep 12 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操作xml代码
2010/06/17 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
js实现无缝滚动双图切换效果
2019/07/09 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
python中requests小技巧
2017/05/10 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
python制作抖音代码舞
2019/04/07 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
安全资料员岗位职责
2013/12/14 职场文书
高三英语教学反思
2014/01/13 职场文书
班级德育工作实施方案
2014/02/21 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
协议书范本
2014/04/23 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书