JavaScript字符串格式化输出
js过程中常常会⽤到字符串拼接,很多时候这些拼接⼜长⼜硬,⽽js⼜没有提供像其他语⾔⼀样的字符串格式化⽅式,于是我们只好DIY了。⼀般来说,我们需要实现如下两种⽅式的格式化:
"{0},{1},hehe".format("hello","world")
"数学={数学},语⽂={语⽂},hou".format({"数学":100,"语⽂":95})
第⼀种是常规的格式化⽅法,很多语⾔中常见。第⼆种就不那么常见了,但是在Js中却很重要,特别是在ajax交互式后我们返回⼀堆的json 数据。当然有很多⼈都写过兼容的format写法,但我们今天要尝试另外⼀些⽅法。
仔细观察上⾯的2中格式话⽅法,我们发现⽅法签名相同,但参数有所不同。不正好⽤到⼀⽂中的⽅法重载么?那么就应该有如下的实现:
sm.Overload("format",String.prototype,{
"string," : function(a,b,c,....){
//pass
},
"object" : function(param){
//pass
}
});
写完之后发现有点纠结,我们的Overload⽅法是根据fn_obj对象的键值(如上⾯代码的"string,")来给定相对的实现的,但是string的个数确实不确定的,我们⽆法⽤它来当⼀个确定的键值。
怎么办呢?
很容易!这⼀堆的string不就代表⼀个string集合么?⽤⼀个Array表⽰就⾏了啊。so...
sm.Overload("format",String.prototype,{
"array" : function(params){
//params is a array
},
"object" : function(param){
//param is a object
}
});
剩下的代码就很好写了:
sm.Overload("format",String.prototype,{
"array" : function(params){
var reg = /{(\d+)}/gm;
place(reg,function(match,name){
return params[~~name];
});
},
"object" : function(param){
var reg = /{([^{}]+)}/gm;
place(reg,function(match,name){
return param[name];
});
}
});
js在字符串中添加字符
调⽤之:
"{0},{1},hehe".format(["hello","world"]); //hello,world,hehe
"数学={数学},语⽂={语⽂},hou".format({"数学":100,"语⽂":95});//数学=100,语⽂=95,hou
对函数签名相同参数不同的函数进⾏⽅法重载好处显⽽易见,每⼀中情况你都可以针对⾏的写出新的函数,⽽不是⽤⼀⼤堆的If,else。如果再有其他形式的格式化⽅式,你只需要⽤sm.Overload对String.prototype.format进⾏扩展即可,⽽不是去⼀个all⽅法⾥添加If。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。