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 相关文章推荐
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
Jan 29 Javascript
js获取图片宽高的方法
Nov 25 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
Sep 14 Javascript
Vue指令的钩子函数使用方法
Mar 20 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
解析Vue 2.5的Diff算法
Nov 28 Javascript
React降级配置及Ant Design配置详解
Dec 27 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
javascrpt密码强度校验函数详解
Mar 18 Javascript
记一次react前端项目打包优化的方法
Mar 30 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php 安全过滤函数代码
2011/05/07 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
javascript各种复制代码收集
2008/09/20 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python heapq使用详解及实例代码
2017/01/25 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
幼儿园保育员岗位职责
2014/04/13 职场文书
入职担保书范文
2014/05/21 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
创业计划书之美甲店
2019/09/20 职场文书
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python