String是基本資料型別,同時也是基本包裝型別。從常規上講基本型別不應該有方法,為了讓我們實現更直觀的操作,在呼叫基本包裝型別的方法時,後臺會自動完成一系列的處理:
(1)建立String型別的一個例項
(2)在例項上呼叫指定的方法
(3)銷燬這個例項
var s1 = "abc"
s2 = s1.substring(2)
複製程式碼
相當於執行了以下程式碼:
var s1 = new String('abc')
var s2 = s1.substring(2)
s1 = null
複製程式碼
引用型別和基本包裝型別的區別
主要的區別就是物件的生存期,使用 new 操作符建立的引用型別的例項,在執行流離開當前作用域之前都一直儲存在記憶體中。而自動建立的基本包裝型別的物件,只存在於一行程式碼的執行瞬間,然後被立即銷燬,所以我們不能在程式碼執行的時候給基本型別之新增屬性和方法
var str1 = '123';
console.log(typeof str1) //string
var str2 = new String('aaa')
console.log(typeof str2) //object
var str3 = new Object('111')
console.log(typeof str3) //object
console.log(str3 instanceof String) //true
console.log(str3 instanceof Object) //true
複製程式碼
字串常用方法
var str="hello world";
str.charAt(1) //e 返回給定位置的字元
str.charcodeAt(1) //101 返回給定位置字元的字元編碼
str[1] //e ie8+
cancat() //可以接受任意多個引數拼接成新的字串,但不會改變原字串
slice() //擷取字串,接受一或兩個引數(開始位置和結束位置),接受負值時會將負值與字串長度相加
substring() //擷取字串,接受一或兩個引數(開始位置和結束位置,會將較小的引數作為起始位置),接受負值時會將負的引數轉換為零
substr() //擷取字串,接受一或兩個引數(開始位置和擷取的字元個數),接受負值時會將第一個負的引數加上字串長度,將第二個負的引數轉換為0
indexOf() //可接受兩個引數,要查詢的子字串和查詢起點(可選),找到返回位置,找不到返回-1
lastIndexOf() //從陣列的末尾開始查詢
trim() //刪除前置和字尾的空格 返回的是字串的副本,原始字串不變
toLowerCase() //轉小寫
toUpperCase() //轉大寫
toLocaleLowerCase() //轉小寫,針對地區的方法
toLocaleUpperCase() //轉大寫,針對地區的方法
match() //接收一個引數,正規表示式或者RegExp物件
search() //接受一個正則,返回字串中第一個匹配項的索引,沒有返回-1
replace() //替換字串。接受兩個引數,第一個是一個字串或者RegExp物件,
//第二個引數是一個字串或者函式。如果第一個引數是一個字串,
//那麼只會替換第一個子字串,要想替換所有唯一的方法就是提供一個
//正規表示式,指定全域性g標誌
//replace()方法的第二個引數也可以是一個函式
function(match,...,pos,originalText){
match //模式的匹配項
... //正規表示式定義了多個捕獲組的情況下,是第二,三...匹配項
pos //模式的匹配項在字串中的位置
originalText //原始字串
}
split() //分割字串,並返回一個陣列。第一個引數接受一個分隔符(可以是字串或者RegExp物件),
//可選的第二個引數用於指定返回陣列的大小
localeCompare() //比較兩個字串,如果字串在字母表中應該排在字串引數之前,返回一個負數。相等返回0,之後返回正數
String.fromCharcode() //建構函式本身的靜態方法,接收一個或多個字元編碼,轉換成字串,與charCodeAt相反
複製程式碼