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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM