2019-08-27JavaScript字符串方法總結(jié)

認(rèn)識JS里的字符串

JavaScript里面的字符串就是用雙引號或者單引號引起來的內(nèi)容,要注意不同的引號可以嵌套但不可以交叉使用。
我們可以借助轉(zhuǎn)義字符去表示我們的字符串里面的引號。
字符串換行時,可以使用 + 級聯(lián)運(yùn)算符 或者 反斜杠表示是一個字符串。

字符串可以通過 單 / 雙引號 來創(chuàng)建,也可以通過 new 操作法(不推薦這種方式,會拖慢執(zhí)行速度)

var x = "Bill";
var y = new String("Bill"); // 不推薦這種方式,會拖慢執(zhí)行速度

x == y 為 true,因?yàn)?x 和 y 的值相等
x === y 為 false,因?yàn)?x 和 y 的值相等,但 x 是 String ,y 是 Object。

字符串有一個 屬性 length ,表示字符串的 長度(即有多少個字符)
字符串中 字符的位置 從 0 開始計(jì)數(shù)


\color{red}{JavaScript 的字符串是不可變的(immutable)}

\color{red}{String 類定義的方法都不能改變字符串的內(nèi)容,不會修改原始字符串}


轉(zhuǎn)為字符串

toString()

沒錯,JS里的字符串也有toString()方法
因?yàn)?br> ECMAScript 定義所有對象都有 toString() 方法,無論它是偽對象,還是真對象。
ECMAScript 的 Boolean 值、數(shù)字和字符串的原始值是偽對象,具有屬性和方法。


查找索引

indexOf() , lastIndexOf() , search()

indexOf()

stringObject.indexOf ( searchvalue, [fromindex] )

在一個字符串中的指定位置從前往后搜索,大小寫敏感,默認(rèn)從 0 處開始檢索

  • 參數(shù):
    searchvalue:String類型 , 檢索的字符串
    fromindex:[ 0, length -1] 的整數(shù),可選參數(shù) ,規(guī)定開始檢索的位置。沒規(guī)定時,從0開始檢索
    fromindex為 負(fù)數(shù)(相當(dāng)于從0開始),浮點(diǎn)數(shù)(取整), >= length的數(shù)(永遠(yuǎn)返回-1),都不會報錯。
  • 返回值:
    startIndex: 檢索到的與searchvalue 相匹配的子串的起始位置(不一定是searchvalue 在字符串中第一次出現(xiàn)的位置)
    -1 : 沒有檢索到子串(不一定是字符串中沒有子串)
  • 應(yīng)用:
    某個指定的字符串值在字符串中首次出現(xiàn)的位置
    var str = '123uiui123';
    str.indexOf("123", 12); // -1
    str.indexOf("123", -10); //0
    str.indexOf("123"); //0

lastIndexOf()

stringObject.lastIndexOf ( searchvalue, [fromindex] )

在一個字符串中的指定位置從后向前搜索,大小寫敏感,默認(rèn)從length -1 處開始檢索

    var str = '123uiui123';
    var index1 = str.lastIndexOf("123", 12); // 7
    var index2 = str.lastIndexOf("123", -10); //0
    var index3 = str.lastIndexOf("123"); //7

search()

stringObject.search ( regexp | searchvalue )

檢索字符串中指定的子字符串
或檢索與正則表達(dá)式相匹配的子字符串

不執(zhí)行全局匹配,忽略標(biāo)志 g。忽略 regexp 的 lastIndex 屬性
從字符串的開始進(jìn)行檢索

  • 參數(shù):
    regexp :檢索的 RegExp 對象
    searchvalue :String類型,檢索的子串
  • 返回值:
    index:stringObject 中第一個與 regexp 或者 searchvalue 相匹配的子串的起始位置。
    -1 : stringObject 中沒有該子串
  • 應(yīng)用:
    var str = '123uiui123';
    str.search("123"); // 0
    str.search(/123/g); //0
    str.search(/123/); //0

查找字符

charAt(),charCodeAt()

charAt(), charCodeAt()

stringObject.charAt(index)
通過下標(biāo)檢索字符串里的字符

stringObject.charCodeAt(index)
通過下標(biāo)檢索字符串里的字符的 Unicode 編碼。

  • 參數(shù):
    index:[0, length-1] 的整數(shù)
  • 返回值:
    下標(biāo)位的字符:當(dāng) index 屬于 [0, length-1]
    空字符串:當(dāng) Index 不是合法的輸入的時候,沒有查找到,就返回 空字符串
    var str = '123uiui123';
    str.charAt(1); // 2
    str.charCodeAt(1); //50
    str.charAt(26); // 空字符串
    str.charAt(-1); // 空字符串
    str.charAt(1.2); // 2,不會報錯,盡量不要有這種寫法

提取部分字符串

slice() , substring(),substr()

slice()

slice( start, [end] )

  • 參數(shù):
    整數(shù)
    -1 ------最后一個字符
    -2 ------倒數(shù)第二個字符……
    end 未寫 表示 提取到最后
  • 返回值:
    提取的字符串,\color{red}{[start, end)}

substring()

stringObject.substring( start, [stop] )

  • 參數(shù):
    自然數(shù),若start > stop , 該方法先交換這兩個參數(shù)。
  • 返回值:
    空串
    start === stop
    輸出非法,沒有提取到字符串
    子串\color{red}{[start, end)}

substr()

stringObject.substr ( start, [length] )

  • 參數(shù):
    start:整數(shù)
    -1 ------最后一個字符
    -2 ------倒數(shù)第二個字符……
    length
    子串的 length
    未寫 表示 提取到最后
  • 返回值:
    抽取的子串

替換字符串內(nèi)容

replace(), toUpperCase() , toLowerCase()

replace()

stringObject.replace ( regexp | substr, replacement )

用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串

  • 參數(shù):
    regexp:規(guī)定要替換的模式的 RegExp 對象。
    substr:規(guī)定要替換的模式的 字符串。
    replacement:一個字符串值。規(guī)定了替換文本或生成替換文本的函數(shù)。
    如果要替換的模式 是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉(zhuǎn)換為 RegExp 對象。
  • 返回值:
    一個新的字符串,是用 replacement 替換了 regexp | substr 的第一次匹配或所有匹配之后得到的。
  • 應(yīng)用:
    刪除字符串里面的空白字符
    var str = ' 123   uiui  123';
    var str2 = str.replace(/\s/g,"");
    console.log("str2",str2);
    console.log("str",str);
image.png

toUpperCase(), toLowerCase()

返回的字符串全為 大|小 寫


字符串連接

concat()

stringObject.concat() 與 Array.concat() 很相似。
使用 + 操作符 代替這個函數(shù) 更簡潔一些!不怎么使用


字符串轉(zhuǎn)為數(shù)組

split()

split()

stringObject.split ( separator, [howmany] )

  • 參數(shù)
    separator:字符串或正則表達(dá)式,從該參數(shù)指定的地方分割 stringObject。
    howmany:返回的數(shù)組的最大長度。
    如果設(shè)置了該參數(shù),返回的子串不會多于這個參數(shù)指定的數(shù)組。
    如果沒有設(shè)置該參數(shù),整個字符串都會被分割,不考慮它的長度。
  • 返回值:數(shù)組
    separator 為字符串時,不包括 separator 自身
    separator 是包含子表達(dá)式的正則表達(dá)式,那么返回的數(shù)組中包括與這些子表達(dá)式匹配的字串(但不包括與整個正則表達(dá)式匹配的文本)。
    var str = '123uiui123';
    console.log(str.split(""));
image.png

其他函數(shù)

trim()

trim()

刪除字符串兩端的空白符

charCodeAt(),fromCharCode()

charCodeAt() 查找一個字符串中指定索引位置的字符的 Unicode 值
fromCharCode()接收一個或多個 Unicode 值,即要創(chuàng)建的字符串中的字符的 Unicode 編碼。String 的靜態(tài)方法

語法:
String.fromCharCode(numX,[numX,……])
stringObject.charCodeAt(index)

小例子——字符串編碼的面試題

輸入的字符串規(guī)則:由數(shù)字和26個英文字母的大小寫組成

加密規(guī)則:

  • 數(shù)字 +1 ,9變?yōu)?
  • 字母 變?yōu)橄乱粋€字母 ,并轉(zhuǎn)變大小寫,z變?yōu)锳 ,Z變?yōu)閍
function change(str){
        var code_A = "A".charCodeAt(0); //65
        var code_a = "a".charCodeAt(0); //97
        var arr = str.replace(/\s/g, "").split("");
        var newArr = arr.map((item, index) => {
            if(isNaN(Number(item))){
                var code_item = item.charCodeAt(0);

                if(code_item >= code_A && code_item < code_a){
                //    字符為 大寫
                    var new_code = code_item - code_A + code_a + 1;
                    if(new_code === code_a + 26){
                        new_code = code_a;
                    }
                    item = String.fromCharCode(new_code);
                    return item;

                } else {
                //    字符為小寫
                    var new_code = code_item - code_a + code_A + 1;
                    if(new_code === code_A + 26){
                        new_code = code_A;
                    }
                    item = String.fromCharCode(new_code);
                    return item;
                }
            } else {
                item = Number(item);
                item += 1;
                if(item === 10){
                    item = 0;
                }
                return item;
            }
        });
        console.log(newArr.join(""));
    }
    change("12A39z0Z"); //23b40A1a
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容