字符串、布爾值、數字都是可以調用方法的,尤其是字符串,有很多的方法可以調用,那麼他們的原理是什麼呢?
1、字符串的原型上的方法
var str = new String(); 空字符串實例
字符串的方法都不會改變原字符串。該實例的原型上的方法有:
(1)charAt方法:返回指定位置的字符
請注意,JavaScript 並沒有一種有別於字符串類型的字符數據類型,所以返回的字符是長度爲 1 的字符串。
var str = "abcde";
console.log(str.charAt(0),str); a abcde
charCodeAt() 方法:返回指定位置的字符的 Unicode 編碼
var str = "abcde";
console.log(str.charCodeAt(0),str); 97 "abcde"
(2) 轉大小寫
toLowerCase() 方法和toLocaleLowerCase() 方法:用於把字符串轉換爲小寫。所有大寫字符全部被轉換爲小寫字符
與 toLowerCase() 不同的是,toLocaleLowerCase() 方法按照本地方式把字符串轉換爲小寫。只有幾種語言(如土耳其語)具有地方特有的大小寫映射,所有該方法的返回值通常與 toLowerCase() 一樣。
var str = "abcDeaBabA";
console.log(str.toLocaleLowerCase()); abcdeababa
toUpperCase()方法 和 toLocaleUpperCase()方法,將字符串的每個字符轉換爲大寫。
(3)去空字符
trim()方法:用於刪除字符串的頭尾空格。
(4)split() 方法:返回一個按參數拆分字符串後的數組
不傳值:將字符串作爲一個整項,作爲數組的第一個項。
傳空字符串:把字符串每一項拆開。
傳指定字符:按指定字符拆開。
var str = "abcdefabab";
console.log(str.split()); ["abcdefabab"]
console.log(str.split("")); ["a", "b", "c", "d", "e", "f", "a", "b", "a", "b"]
console.log(str.split("a"));["", "bcdef", "b", "b"]
concat() 方法:用於連接兩個或多個字符串,返回拼接後的新字符串。
var str = "abcde";
console.log(str.concat("mn","xyz")); abcdemnxyz
slice(start, end) 方法:可提取字符串的某個部分,並以新的字符串返回被提取的部分。
使用 start(包含) 和 end(不包含) 參數來指定字符串提取的部分。
字符串中第一個字符位置爲 0, 第二個字符位置爲 1, 以此類推。
提示: 如果是負數,則該參數規定的是從字符串的尾部開始算起的位置。也就是說,-1 指字符串的最後一個字符,-2 指倒數第二個字符,以此類推。
var str = "abcdefabab";
console.log(str.slice(0,3)); abc
substring() 方法:用於提取字符串中介於兩個指定下標之間的字符
var str = "abcdeababa";
console.log(str.substring(0,3)); abc
(5) indexOf方法:字符串原型上也有這個方法,所以字符串也可以用這個方法來查找字符是否存在。同樣還有lastIndexOf方法。
(6)localeCompare() 方法:用本地特定的順序來比較兩個字符串。結合數組sort方法可以排序。
提供的比較字符串的方法,考慮了默認的本地排序規則。ECMAscript 標準並沒有規定如何進行本地特定的比較操作,它只規定該函數採用底層操作系統提供的排序規則。
console.log("a".localeCompare("b")); -1 升序
console.log("b".localeCompare("a")); 1 降序
給數組中的每一項排序,按本地規則排序。如果是數字,按數字大小排序,如果是字符串,按本地規則的字符串排序。
var arr = ["我","你","他",12,3,5,14,"abc","b","ac"];
arr.sort((a,b) => {
return typeof a === "number" && typeof b === "number" ? a - b : (a+"").localeCompare(b+"");
})
console.log(arr); [3, 5, 12, 14, "你", "他", "我", "abc", "ac", "b"]
(7)與正則表達式相關的方法
match() 方法:可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。
該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
var str = "abcdeababa";
var reg = /a/g;
console.log(str.match(reg)) ["a", "a", "a", "a"]
match() 方法將檢索字符串,以找到一個或多個與 regexp 匹配的文本。這個方法的行爲在很大程度上有賴於 regexp 是否具有標誌 g。如果 regexp 沒有標誌 g,那麼 match() 方法就只能在 stringObject 中執行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。
匹配不到返回null :
var str = "abcdefabab";
var reg = /\d/g
console.log(str.match(reg)); null
全局匹配和非全局匹配的結果是不同的。
全局匹配:返回所以匹配到的組成的數組。
var str = "abcdefabab";
var reg = /b/g;
console.log(str.match(reg)); ["b", "b", "b"]
非全局匹配:返回匹配項信息組成的數組。
var str = "abcdefabab";
var reg = /b/;
console.log(str.match(reg)); ["b", index: 1, input: "abcdefabab", groups: undefined]
replace() 方法:用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。不修改原字符串。
字符串替換字符串:只能匹配到第一個字符,然後將其替換:
var str = "abcdefabab";
console.log(str.replace("a","1"),str); 1bcdefabab abcdefabab
正則表達式非全局匹配:
var str = "abcdefabab";
var reg = /a/;
console.log(str.replace(reg,"1")); 1bcdefabab
正則表達式全局匹配字符:
var str = "abcdefabab";
var reg = /a/g;
console.log(str.replace(reg,"1")); 1bcdef1b1b
正則的子表達式:第二個參數中$1 $2 $n將代表對應的子表達式
var str = "a1bcdefa2ba3b";
var reg = /(a)(\d)/g;
console.log(str.replace(reg,"$2$1")); 1abcdef2ab3ab
正則與 正則表達式相匹配的文本:$&
var str = "a1bcdefa2ba3b";
var reg = /(a)(\d)/g;
console.log(str.replace(reg,"$&$&")); a1a1bcdefa2a2ba3a3b
正則表達式匹配內容左側的文本:$`
下例中第一個a的左側文本替換a,第二個a的左側文本替換a
var str = "12a34a56";
var reg = /a/g;
console.log(str.replace(reg,"$`")); 12123412a3456
正則表達式匹配子串右側的內容:$'
第二個參數是函數:
var str = "12a34a56";
var reg = /(a)(\d)/g;
console.log(str.replace(reg,function(){
console.log(arguments);
return "b";
}));
匹配到幾次,函數就執行幾次。每次打印的arguments如下:
該處理函數接收的實參包括:
param1:匹配到的文本,
param2子表達式1,param3子表達式2,。。 子表達式是從第二個參數開始的
倒數第二個:是匹配到的文本的位置,
倒數第一個:字符串本身。
search() 方法:用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串。
返回檢索到的第一個符合的位置,如果沒有找到任何匹配的子串,則返回 -1。
var str = "12a34a56";
var reg = /(a)(\d)/g;
console.log(str.search(reg)); 2
(8)還有一些方法可以修改樣式,參考以下圖片
2、布爾值的原型上的方法
var flag = new Boolean(); 值爲false的布爾類型
我們知道布爾類型也重寫了toString方法
var flag = true;
console.log(flag.toString(), typeof flag.toString()); true string
console.log(flag, typeof flag); true "boolean"
3、數字的原型上的方法
var num = new Number(); 值爲0的數字類型
Number原型上的這三個方法,都是返回字符串 ,且不改變原數字。
(1)toString方法:返回字符串類型,不改變數字原本的類型。
var num1 = 123456;
console.log(num1.toString()); 字符串123456
console.log(typeof num1.toString()); 類型string
console.log(typeof num1); 類型number
(2)toFixed方法:保留幾位小數且會進行四捨五入,返回值是四捨五入後的結果,不改變原本的數字。不夠時用0代替。
注意參數 在: 0 ~ 20 之間的值,包括 0 和 20
var num1 = 1.23456;
console.log(num1.toFixed(3),typeof num1.toFixed(3)); 1.235 string
console.log(num1); 數字1.23456
小數部分不夠時,用0代替。
var num1 = 123456;
console.log(num1.toFixed(3)); 123456.000
(3)toExponential方法:轉爲科學計數法,參數爲保留的小數個數,會進行四捨五入。
var num1 = 123456;
console.log(num1.toExponential(3),typeof num1.toExponential(3)); 1.235e+5 string
console.log(num1); 數字123456
再比如:科學計數法保留七位小數:
var num1 = 123456;
console.log(num1.toExponential(7),typeof num1.toExponential(7)); 1.2345600e+5 string