JS格式化字符串的兩種方法(反引號(hào)與String.prototype)
本文一共介紹了兩種實(shí)現(xiàn)方式:
1. 使用反引號(hào)實(shí)現(xiàn)(推薦)
ES6 模板字符串(Template String)是增強(qiáng)版的字符串,用反引號(hào)(`)標(biāo)識(shí),它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串,或者在字符串中嵌入變量。
語(yǔ)法格式:
`想要輸出的字符串……${變量名稱}想要輸出的字符串……${變量名稱}`
應(yīng)用實(shí)例:
<script> window.onload = function() { var name = "徐可可"; var age = 25; var sex = "男"; console.log(`大家好,我叫${name},性別${sex},今年${age}歲了`); } </script>
2. 自定義方法實(shí)現(xiàn)
String.prototype 屬性表示 String原型對(duì)象。所有 String 的實(shí)例都繼承自 String.prototype. 任何String.prototype上的改變都會(huì)影響到所有的 String 實(shí)例。js擴(kuò)展String.prototype.format字符串拼接的功能,首先是基礎(chǔ)功能的改造:
String.prototype.format = function(){ if(arguments.length==0){ return this; } for(var s=this, i=0; i<arguments.length; i++){ s = s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]); } return s; };
然后就是調(diào)用了:
//方式1 var test = '我的{0}是{1}'; var result = test.format('ID','coco56'); //方式2 var test = '我的{description}是{name}'; var result = test.format({description:'ID',name:'coco56'});
下面是其它網(wǎng)友的補(bǔ)充
格式化字符串
使用的replace不適合多個(gè)重復(fù)
<!-- lang: js --> String.prototype.format = function(args) { var result = this; if (arguments.length < 1) { return result; } var data = arguments; //如果模板參數(shù)是數(shù)組 if (arguments.length == 1 && typeof (args) == "object") { //如果模板參數(shù)是對(duì)象 data = args; } for (var key in data) { var value = data[key]; if (undefined != value) { result = result.replace("{" + key + "}", value); } } return result; }
版本2 使用了replaceAll
<!-- lang: js --> /** * 替換所有匹配exp的字符串為指定字符串 * @param exp 被替換部分的正則 * @param newStr 替換成的字符串 */ String.prototype.replaceAll = function (exp, newStr) { return this.replace(new RegExp(exp, "gm"), newStr); }; /** * 原型:字符串格式化 * @param args 格式化參數(shù)值 */ String.prototype.format = function(args) { var result = this; if (arguments.length < 1) { return result; } var data = arguments; // 如果模板參數(shù)是數(shù)組 if (arguments.length == 1 && typeof (args) == "object") { // 如果模板參數(shù)是對(duì)象 data = args; } for ( var key in data) { var value = data[key]; if (undefined != value) { result = result.replaceAll("\\{" + key + "\\}", value); } } return result; }
使用方法:
<!-- lang: js --> //兩種調(diào)用方式 var template1="我是{0},今年{1}了"; var result1=template1.format("loogn",22); var template2="我是{name},今年{age}了"; var result2=template2.format({name:"loogn",age:22}); //兩個(gè)結(jié)果都是"我是loogn,今年22了"
對(duì)于版本2使用了正則表達(dá)式(replaceaAll),意味著當(dāng)文本中出現(xiàn)多個(gè)替換位時(shí),都可以被替換。 var template1=“我是{0},今年{1}了, lucy今年也{1}了”; var
//結(jié)果是"我是loogn,今年22了, lucy今年也22了"
到此這篇關(guān)于JS格式化字符串的兩種方法(反引號(hào)與String.prototype)的文章就介紹到這了,更多相關(guān)JS格式化字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS開(kāi)發(fā)自己的類庫(kù)實(shí)例分析
這篇文章主要介紹了JS開(kāi)發(fā)自己的類庫(kù),結(jié)合實(shí)例形式分析了javascript開(kāi)發(fā)類庫(kù)的原理、組成及實(shí)現(xiàn)方法,需要的朋友可以參考下2019-08-08javascript刪除數(shù)組重復(fù)元素的方法匯總
這篇文章主要介紹了javascript刪除數(shù)組重復(fù)元素的方法,實(shí)例匯總了幾種常用的javascript刪除數(shù)組重復(fù)元素的技巧,需要的朋友可以參考下2015-06-06基于javascript實(shí)現(xiàn)移動(dòng)端輪播圖效果
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)移動(dòng)端輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12前端常用6種數(shù)據(jù)加密方式的使用詳細(xì)講解
在前端開(kāi)發(fā)中,常用的數(shù)據(jù)加密技術(shù)包括Base64編碼、MD5哈希、SHA-256哈希、AES對(duì)稱加密、RSA非對(duì)稱加密和HMAC消息認(rèn)證碼,這些加密方式提供了不同層次的數(shù)據(jù)安全保護(hù),適用于不同的安全需求和場(chǎng)景,需要的朋友可以參考下2024-09-09webpack與SPA實(shí)踐之管理CSS等資源的方法
本篇文章主要介紹了webpack與SPA實(shí)踐之管理CSS等資源的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Javascript Bootstrap的網(wǎng)格系統(tǒng),導(dǎo)航欄和輪播詳解
這篇文章主要為大家介紹了Javascript Bootstrap的網(wǎng)格系統(tǒng),導(dǎo)航欄和輪播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11微信小程序?qū)崿F(xiàn)上傳多個(gè)文件 超過(guò)10個(gè)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳多個(gè)文件,超過(guò)10個(gè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02H5實(shí)現(xiàn)中獎(jiǎng)記錄逐行滾動(dòng)切換效果
這篇文章主要為大家詳細(xì)介紹了H5實(shí)現(xiàn)中獎(jiǎng)記錄逐行滾動(dòng)切換效果,利用定時(shí)器實(shí)現(xiàn)中獎(jiǎng)記錄逐行展示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03