zoukankan      html  css  js  c++  java
  • String.format in JavaScript

    废话

    突然发现做菜鸟也有别样的乐趣,虽然总是心里发虚,但是有很多从未触及的空间,很容易就能找到可以学习和前进的部分,在一个新领域从零开始不断充实自己其实真是个很愉快的过程。周日的下午,一边喝点热茶一边码点代码,伴着《晚风》,惬意得很。

    问题

    在做javascript的入门练习,有一个要求是以形如“今天是某年某月某日 星期几”的格式显示当前日期,我想当然地搬用了c#里常用的String.format函数,也很顺理成章地在firebug里收到了错误提示“TypeError: String.format is not a function”,后来去网上一查,原来javascript并没有原生的字符串format方法,需要自行构建。

    解决

    在网上找了一段现成的代码(代码转自:http://icodon.com/string-format-by-javascript.html),经测试可用:

    String.format = function ()
    {
        var param = [];
        for (var i = 0, l = arguments.length; i < l; i++)
        {
            param.push(arguments[i]);
        }
        var statment = param[0]; // get the first element(the original statement)
        param.shift(); // remove the first element from array
        return statment.replace(/{(d+)}/g, function(m, n)
        {
            return param[n];
        });
    }
    

    说明

    1.为什么用String.format而不是String.prototype.format?
    这里就应该用静态方法,可以不经实例化直接调用。

    2.Array的shift()方法
    shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
    所以,

    var statment = param[0];
    param.shift(); 
    

    这两行可以合写成一行:

    var statment = param.shift(); 
    
    statment.replace(/{(d+)}/g, function(m, n)
        {
        return param[n];
        });
    

    /{(d+)}/g:

    • 起始/与结尾/之间:正则表达式内容
    • g:全局匹配
    • {:匹配{,是转义符
    • }:匹配},是转义符
    • (d+):子表达式,匹配至少一个数字
    • function(m,n){}:m值对应匹配到的字符,如“{0}”,n值对应子表达式匹配的字符,如“0”,用这个n值作为数值key,取param里的attribute

    使用

    var str = String.format("今天是{0}年{1}月{2}日", year, month, date);
    
  • 相关阅读:
    eclipse快捷键
    Struts2框架(8)---Struts2的输入校验
    Struts2框架(5)---result结果集
    Spring框架(6)---AspectJ实现AOP
    Spring框架(4)---AOP讲解铺垫
    Spring框架(3)---IOC装配Bean(注解方式)
    Spring框架(2)---IOC装配Bean(xml配置方式)
    Spring框架(1)---Spring入门
    Mybatis框架(5)---动态sql
    Mybatis框架(4)---输入输出映射
  • 原文地址:https://www.cnblogs.com/SheilaSun/p/4380910.html
Copyright © 2011-2022 走看看