前言:
在平常的資料解析中,陣列,字串,物件是必不可少的三種型別,今天就字串的一些常用方法做一個整理,每個方法對應都會相應的示例,不僅是為了能夠讓大家一目瞭然,節約時間,更是為了以後自己以後也方便查閱! (在下面的方法中,有解析錯誤的地方,還望大家提出意見或建議,感謝!)
0、從原始字串到模版字面量
模版字面量:
`hello world` `hello! world!` `hello ${who}` escape `<a>${who}</a>`
複製程式碼
(1.)我們原來使用的字串:
字串不區分單引號' '和雙引號" "所有的字串拼接都會識別,如果你的字串比較長,可分行使用“+”來拼接。
例如:
let longString = "This is a very long string which needs " +
"to wrap across multiple lines because " +
"otherwise my code is unreadable.";
console.log(longString);
// "This is a very long string which needs to wrap across multiple lines because otherwise my code is unreadable."
複製程式碼
或者也可以使用 "\" 來告訴瀏覽器,你需要繼續寫這個字串,但需要保證 "\"後面是沒有任何符號或者是空格的;
例如:
let longString = "This is a very long string which needs \
to wrap across multiple lines because \
otherwise my code is unreadable.";
console.log(longString)
// "This is a very long string which needs to wrap across multiple lines because otherwise my code is unreadable."
複製程式碼
以前,我們用單引號或雙引號表示字串。
let a = '123'; //單引號
複製程式碼
let b = "123"; //雙引號
複製程式碼
(2.)我們現在使用的模板字面量:
現在,使用模板字面量反撇號` `。在實際開發中,這是經常都要用到的方法。
let c = `123` //反撇號
複製程式碼
在字串中使用反撇號,只需要加上轉義符 ,這時中間的 `,沒有什麼意義:
let d = `12\`3` //字串內插入反撇號的方式。 // "12`3"
複製程式碼
在多行字串的使用價值:
在沒有模板字面量的時候,我們要實現多行字串,必須用到換行符:
let a = '123\n456';
console.log(a);
// 123
// 456
複製程式碼
使用模板字面量,就可以非常簡單的實現需求。
let a = `123
456`;
console.log(a) // 123
// 456
複製程式碼
在模板字面量插入變數的方法
在原來的我們要在字串中拼接變數,需要用‘+變數+’或者 + 來實現,而現在 而是使用${params}直接插入你需要新增到字串的位置。這種方式也叫作字串佔位符。佔位符支援互相巢狀模板字面量,強大吧。有了它,我們終於可以拋棄 + 拼接字串的噁心做法了。
字串和變數拼接:
var str=`xiaoming`;
console.log(`wo shi ${str}`) // wo shi xiaoming
複製程式碼
變數和變數拼接:
var str0=`wo shi `;
var str=`xiaoming`;
console.log(str0+`${str}`) // wo shi xiaoming
複製程式碼
1、charAt() 根據下標查詢訪問字串的某個字元
在1個字串中,我們知道某個字元的索引值,那麼就可以通過索引值來獲取當前字元
例如:
var str1=`age`;
console.log(str1.charAt(2)) // e
// 還可以使用 [ ] 的形式來訪問,中括號填寫的是字串的下標
var str1=`age`;
console.log(str1[2]) // e
複製程式碼
2、字串的比較">" , "<" ,"===" ,">=" ,"<=" ,"!=="
(1).字母字串比較,會先轉成ascii碼,再進行比較
var str1=`aa`;
var str2=`bb`;
console.log(str1<str2) // true
(2).數字字串比較(會比較兩個數字的大小)
var str1=`10`;
var str2=`15`;
var str3=`10`;
console.log(str1<str2,str1===str3) // true,true
複製程式碼
3、字串的長度 length
在我們之前只使用過陣列的length
來判斷,更改,清空陣列等,這次我們來看一下字串的length
。
例如:
var str="我愛你中國";
console.log(str.length) // 5
複製程式碼
string
的length
是隻讀屬性,下面我們做一下驗證:
var str=`This is an apple`;
console.log(str.length) // 16
str.length=5;
console.log(str.length) // 16
複製程式碼
4、charCodeAt(index) 返回表示給定索引的字元的Unicode的值。
方法返回0到65535之間的
UTF-16
編碼單元匹配Unicode
編碼單元整數,當charCodeAt()
括號中沒有值時,預設為查詢字串首位的位置;當有引數時,查詢的是字串的索引值,index
的值為一個大於等於 0,小於字串長度的整數。
例:
var str="abc";
console.log(str.charCodeAt()) // 97
var str="abc";
console.log(str.charCodeAt(0)) // 97
複製程式碼
結果都是一樣的,查詢到"a"在編碼中的位置為97
var str="abc";
console.log(str.charCodeAt(1)) // 98
複製程式碼
字母"b"在編碼中的位置為98
5、str.concat(str1,str2....)字串拼接
在字串拼接中,最常用的還是“+”;
var str = "d";
var str1 = "e";
var str2 = "f";
var str3 = str+str1+str2;
console.log(str3) // "def"
複製程式碼
當然我們也可以使用concat(....)
var str1 = "a";
var str2 = "b";
var str3 = "c";
console.log(str1.concat(str2,str3)) // "abc"
複製程式碼
更高階的方法就是使用我們ES6的模版字面量來操作:
var str=`xiaoming`;
console.log(`wo shi ${str}`) // wo shi xiaoming
複製程式碼
6、includes(str)檢測一個字串是否在另一個字串裡包含,區分大小寫
例:
我們測試def
是否在字串str
中
var str="abcdef";
console.log(str.includes("def")); // true
複製程式碼
而我們把“def”換成大寫的“DEF”時,並不能檢測到
var str="abcdef";
console.log(str.includes("DEF")); // false
複製程式碼
7、endsWith(str) 檢測字串是不是以“str”結尾的
str.endsWith(searchString [, position]);
複製程式碼
searchString 要搜尋的子字串。
複製程式碼
position 在 str 中搜尋 searchString 的結束位置
複製程式碼
position
當不填寫值時,預設值為str.length
,也就是真正的字串結尾處,從下標為0
的字元開始,空格和符號也算字元。 也是開始的位置。
例:
1、當沒有第二個引數時。預設第二個引數為字串的length
var str = "To be, or not to be, that is the question.";
console.log(str.endsWith("question.")) // true
複製程式碼
2、 當有第二個引數的時候,從第二個引數開始,而不是從“0”
var str = "To be, or not to be, that is the question.";
console.log(str.endsWith("T",1)) // true;
複製程式碼
3、第二個引數的計算是包含空格和標點符號的
var str = "To be, or not to be, that is the question.";
console.log(str.endsWith("To be", 5)) // true
複製程式碼
8、str.indexOf()
方法返回str
查詢的結果,如果是有返回指定索引(查詢到結果的第一個字元的位置),如果沒有返回“-1”,區別大小寫
例:
"ABC".indexOf("A") // 0 查詢到“A”,返回位置為索引“0”
"ABC".indexOf("e") // -1 並沒有查詢到“e”,返回-1
"ABC".indexOf("AB") // 0 如果查詢連續字元,返回連續字元的首位位置
複製程式碼
檢測是否存在某字串:
當檢測某個字串是否存在於另一個字串中時,可使用下面的方法:
"Blue Whale".indexOf("Blue") !== -1; // true
"Blue Whale".indexOf("Bloe") !== -1; // false
複製程式碼
使用 indexOf 統計一個字串中某個字母出現的次數 在下例中,設定了 count 來記錄字母 e 在字串 str 中出現的次數:
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');
while (pos !== -1) {
count++;
pos = str.indexOf('e', pos + 1);
//重新給pos賦值,從上個查詢到str的位置+1的位置繼續查詢,如果能查到就會再進迴圈,count+1
}
console.log(count); // 4
複製程式碼
9、lastIndexOf()
方法返回指定值在呼叫該方法的字串中最後出現的位置,如果沒找到則返回-1
str.lastIndexOf(searchValue[, fromIndex])
複製程式碼
引數:
searchValue 一個字串,表示被查詢的值。
複製程式碼
fromIndex 開始查詢的下標位置。可以是任意整數。預設值為 str.length。如果為負值,則被看作 0。如果 fromIndex > str.length,則 fromIndex 被看作 str.length。
複製程式碼
例: 當只有一個引數的時候,第二個值預設str.length,也就是查詢整個字串,查詢到這個str在整個字串中最後出現的位置
"AVBDHIUOKL".lastIndexOf("O"); //7
"AFGHJKLL:JJHKAJALKA".lastIndexOf("A"); //18
複製程式碼
當有第二個引數時,第二個引數會被看成查詢這個字串的結束位置
//從0到第10個索引值時,只在0的位置查詢到"A",所以返回0
"AFGHJKLL:JJHKAJALKA".lastIndexOf("A",10); // 0
//從0到第15個索引值時,在第15的位置查詢到"A",所以返回15
"AFGHJKLL:JJHKAJALKA".lastIndexOf("A",15); // 15
複製程式碼
10、str.repeat(count)
構造並返回一個新字串,該字串是迴圈完成後的新字串
repeat(count)
的值一般為數字,就好比"a".repeat(5)=="a"*5=="aaaaa"
,
但也會出現其他情況,例如以下:
1.當值為“-1”時,會報錯,所以值不能為負數。
"abc".repeat(-1)
// RangeError: repeat count must be positive and less than inifinity
複製程式碼
2.那我們值為“0”時,會有什麼情況呢?將不會迴圈,返回一個空字串。
"abc".repeat(0) // ""
複製程式碼
3.那麼我們接下來輸入一個正常的數字“1”,repeat
給我們返回了"abc"*1
的結果,它將迴圈一遍。
"abc".repeat(1) // "abc"
複製程式碼
4.那麼我們試試“2”,看看會不會返回迴圈兩次,確實它返回了字串迴圈兩遍的結果。
"abc".repeat(2) // "abcabc"
複製程式碼
5.那我們來試試小數,看看是迴圈幾次呢,結果是它將小數點後面的抹去了,只迴圈了前面的數字。
"abc".repeat(3.5) // "abcabcabc" 引數count將會被自動轉換成整數.
複製程式碼
6.那我們試試“1/0 ”,並沒有解析出來,因為1/0==inifinity
"abc".repeat(1/0)
// RangeError: repeat count must be positive and less than inifinity
複製程式碼
7.那我們再來試試字串呢?結果它將字串自動轉為了number,並正確迴圈並返回了。
"abcd".repeat("2") // "abcabc"
複製程式碼
8.看看它是否能解析中文漢字呢? 結果是並沒有,也沒有報錯。
"abcd".repeat("二") // ""
複製程式碼
11、str.slice(beginSlice,endSlice)擷取字串,第一個引數為開始位置,第二個引數為結束位置,前包後不包
1.slice()
從一個字串中提取字串並返回新字串。在一個字串中的改變不會影響另一個字串。也就是說,slice
不修改原字串,只會返回一個包含了原字串中部分字元的新字串。
var str = "avxdsdfasd";
var str2 = str.slice(1, 4);
console.log(str,str2) // "avxdsdfasd","vxd"
複製程式碼
2.注意:slice()
提取的新字串包括beginSlice
但不包括 endSlice
。
var str = "aexdsdfasd";
var str2 = str.slice(0,2);
console.log(str2) //"ae"
複製程式碼
3.提取新字串從第二個字元到第四個 (字元索引值為 1, 2, 和 3)。
"avxdsdfasd".slice(1, 4) //"vxd"
複製程式碼
4. 提取第三個字元到倒數第二個字元。-1為倒數第一個。
"abckdesdf".slice(2, -1) //"ckdesd"
複製程式碼
5.當開始的值和結束的值都為負數時,結果會從後向前數,從-3到-1之間的值(前包後不包)
"abckdesef".slice(-3, -1) //"se"
複製程式碼
12、str.split()
方法,使用指定的分隔符字串將一個string
物件分割成字串陣列
1.當括號中為空值時,直接將它轉為字串陣列
console.log("abcdefg".split()); // ["abcdefg"]
複製程式碼
2.當括號中為空引號時,它將每個字串都分割了出來
console.log("abcdefg".split("")); // ["a", "b", "c", "d", "e", "f", "g"]
複製程式碼
當在空引號中加上一個空格時,它會以你原字串的空格來分割
"Webkit Moz O ms Khtml".split( "" ) // ["Webkit", "Moz", "O", "ms", "Khtml"]
複製程式碼
3.當括號中為字串中的字母,它將以當前字母分割字串
console.log("abcdefg".split("a")); // ["", "bcdefg"]
console.log("abcdefg".split("b")); // ["a", "cdefg"]
複製程式碼
4.當括號中字串並不是當前字串中包含的,它只接轉成陣列字串,不做其他操作
console.log("abcdefg".split("bbbb")); // ["abcdefg"]
複製程式碼
13、startsWith()
檢測字串是不是以“str”
開頭的,根據判斷返回true
,false
(ES6新添,與endsWith
相反)
str.startsWith(searchString [, position]);
複製程式碼
引數:
searchString 要搜尋的子字串。
複製程式碼
position 在`str`中搜尋`searchString`的開始位置,預設值為 0,也就是真正的字串開頭處。
複製程式碼
var str = "To be, or not to be, that is the question.";
console.log(str.startsWith("To be")) // true
console.log(str.startsWith(" be")) //false
console.log(str.startsWith("not to be", 10)) // true
複製程式碼
14、str.substr()方法返回一個字串中從指定位置開始到指定字元數的字元。
str.substr(start[, length])
複製程式碼
start:開始擷取的位置,開始索引為0,最大為str.length-1,也可為負數;
複製程式碼
length:要擷取的長度,如果不填寫,預設為str.length-1;最小為1,最大為str.length-1.負數無效,如果為0或者負值,返回一個空字串。
複製程式碼
var str = "abcdefghij";
複製程式碼
1.當兩個值都為正值,且都在範圍之內:
console.log("(1,2): " + str.substr(1,2)); // (1,2): bc
複製程式碼
2.當擷取位置為負數時,會從後向前數,倒數第一個索引為-1,擷取的長度會從當前位置向後數
console.log("(-3,2): " + str.substr(-3,2)); // (-3,2): hi
複製程式碼
3.當只有開始位置的值,並且為負值時,會從當前位置,擷取到字串的末尾
console.log("(-3): " + str.substr(-3)); // (-3): hij
複製程式碼
4.當只有開始的位置,為正值,第二個值預設是str.length-1,也就是擷取到字串的末尾
console.log("(1): " + str.substr(1)); // (1): bcdefghij
複製程式碼
5.當開始的索引是超過字串長度的負數時,就相當於字串一直是從後向前數的
console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab
複製程式碼
6.當開始的索引是超過字串的長度的正值時,無法擷取到內容,返回空字串
console.log("(20, 2): " + str.substr(20,2)); // (20, 2):""
複製程式碼
15、str.substring()
擷取開始位置和結束位置之間的字串,前包後不包
str.substring(start,stop)
start:開始擷取的位置,不為負數;
stop:結束的擷取位置,不為負數;
複製程式碼
當引數為負數時,不識別,預設轉為0;當第二個值為負數時,預設轉為0,,並調換開始和結束的兩個值的位置,
var str= "abcdefghij";
複製程式碼
1.當開始和結束都為正值,並都在範圍內,從索引為1的位置擷取到索引為2的位置;
console.log("(1,2): " + str.substring(1,2)); // (1,2): b
複製程式碼
2.當只有一個開始位置的值時,會從開始位置直接擷取到結束位置;
console.log("(1): " + str.substring(1)); // (1): bcdefghij
複製程式碼
3.當開始位置為負數時,會直接轉為0來擷取;
console.log("(-1): " + str.substring(-1)); // (-1): abcdefghij
複製程式碼
4.當結束位置超過字串的長度,會預設忽略第二個引數;
console.log("(1,20): " + str.substring(1,20)); // ((-1): bcdefghij
複製程式碼
5.當結束位置為負數,會直接轉為0,並交換開始和結束的位置;
console.log("(1,-5): " + "sdsdfsdf".substring(1,-5));// ((1,-5): s
複製程式碼
6.當開始位置和結束位置的值為同一值時,返回空字串
console.log("(1,1): " + "sdsdfsdf".substring(1,1)) ; // ((1,1): ""
複製程式碼
16、str.toLowerCase()將字串轉為小寫的形式(並不會影響字串本身的值)
console.log("ABC".toLowerCase()); // "abc"
複製程式碼
17、str.UpperCase()將字串轉為大寫的形式(並不會影響字串本身的值)
console.log( "alphabet".toUpperCase() ); // "ALPHABET"
複製程式碼
18、obj.toString()方法用於將現有的物件轉為字串;
1.陣列轉字串;
console.log( [1,2,3,4,5].toString()); //"1,2,3,4,5"
複製程式碼
2.物件轉字串,將會返回[object Object],故不支援轉換
var a={a:1,b:2};
console.log( a.toString()); // [object Object]
複製程式碼
19、str.trim()
方法會從一個字串的兩端刪除空白字元,在這個上下文中的空白字元是所有的空白字元(space
(空格鍵),tab
,no-break``space
等)以及所有行終止字元(如LF
,CR
)。
trim()方法並不會影響原字串,會返回一個新字串。
複製程式碼
例: 1.當字串兩側都有空格時,會全部刪除
var orig = ' foo ';
console.log(orig.trim()); // 'foo'
複製程式碼
2.當字串單側有空格,則就從單側刪除
var orig = 'foo ';
console.log(orig.trim()); // 'foo'
複製程式碼
20、String.fromCharCode(num1,num2,、、numN)
用於返回當前Unicode
數字所對應的字元
String.fromCharCode(num1, ..., numN)
複製程式碼
引數
num1, ..., numN 一組序列數字,表示 Unicode 值。
複製程式碼
該方法返回一個字串,而不是一個 String 物件。 由於
fromCharCode
是String
的靜態方法,所以應該像這樣使用:String.fromCharCode()
,而不是作為你建立的String
物件的方法。
例:
console.log(String.fromCharCode(65,66,67)); //"ABC"
複製程式碼
21、replace
字串的替換
文章寫到這裡竟然忘了一個超好用的方法:
replace
,用於替換指定的字串。
str.replace('a','b')
複製程式碼
第一個引數是需要被替換的字串規則,可以是普通字串,也可以是正則規則,第二個引數是要替換成的內容。
例:
- 普通字串
let str ="abcdefg";
let str1 = str.replace('abc','def');
console.log(str1) // defdefg
複製程式碼
- 正則匹配
let text = "javascript Tutorial";
console.log(text.replace(/javascript/i, "JavaScript"));
複製程式碼
作者:晴天de雨滴
出處:https://juejin.im/post/5a125827518825293b4fea8a
版權所有,歡迎保留原文連結進行轉載:)
複製程式碼
如果你對我對文章感興趣或者有些建議想說給我聽?,也可以新增一下微信哦!
如果親感覺我的文章還不錯的話,可以一下新增關注哦!最後:
祝各位工作順利!
-小菜鳥Christine
複製程式碼