JavaScript字符串String和Array操作的有趣方法
2024-05-06 14:20:28
供稿:網友
字符串和數組在程序編寫過程中是十分常用的類型,因此程序語言都會將String和Array作為基本類型,并提供許多字符串和數組的方法來簡化對字符串的操作。JavaScript里面也提供了String類型和Array類型,并且有很多基本的String方法和Array方法來方便地對字符串進行合并、查找、替換、截取等處理。
JavaScript作為一個腳本語言,又提供了一種動態解析運行的機制,而這特性,又讓使得在String操作的時候出現一些結合使用Array的有趣方法。這些方法可能有些偏門有點奇怪,但有時在效率、可讀性、復用性上表現得卻更好。
重復字符串
常常我們想要把字符串多次打印出來(比如想要個分割線),我們就需要將一個字符串重復多次, 可惜JavaScript并沒有提供類似repeat這樣的方法。當然我們可以用循環來拼接出來,但是我們可以利用JavaScript中Array的join方法來實現repeat
代碼如下:
function repeat(str, n) {
var arr = new Array(n+1);
return arr.join(str);
}
//output:
//-------
利用n+1個Array元素產生的n個間隙,再以目標字符串來拼接,我們就能得到字符串重復的功能。
擴展String的prototype使方法應用于所有字符串
JavaScript的對象繼承和方法尋找是基于原型鏈(prototype chain),所有使用著的字符串都可以說是繼承于String的對象,我們可以為String對象的prototype添加方法或者屬性,這樣該方法就可以應用到所有我們使用的對象上了。比如上邊的repeat方法,就可以改成:
代碼如下:
String.prototype.repeat = function(n) {
var arr = new Array(n+1);
return arr.join(this);
};
document.write('-'.repeat(21));
//output:
//---------------------
然后,直接通過字符串調用repeat方法,就可以得到跟上邊一樣的結果。
這可以讓我們實現對字符串方法的擴充,簡潔對字符串的操作,但是這會“污染”了JavaScript的String,當代碼被轉到其他文件但是那個文件下并沒有得到這段擴充,就可能會造成找不到該方法;另外,調用prototype擴展方法比直接調用方法要稍微“慢”一些,因為JavaScript會先去在字符串對象自身的方法中嘗試尋找,再找到String的prototype的方法;再者也許在將來我們擴充的方法(比如repeat)變成了標準方法了,再使用這代碼就會覆蓋了標準方法,得到不一致的結果。
但是忽略這些考慮,擴充JavaScript標準類型的prototype還是會給編程帶來許多的遍歷。
用Array作StringBuilder
在很多高級語言中,加號(+)在字符串的操作中被賦予了更多的意義:作為字符串拼接的操作符。不過在Java和C#中,我們也知道如何頻繁進行字符串拼接的操作,使用加號(+)就會產生效率問題,因此在這種情況下就會推薦使用StringBuilder。