包裝類對象

字符串、布爾值、數字都是可以調用方法的,尤其是字符串,有很多的方法可以調用,那麼他們的原理是什麼呢?

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章