天天看點

我的Javascript學習-------基礎篇(十一)(關于字元串對象的學習)

字元串對象

基本包裝類型

為了友善操作基本資料類型,JavaScript 還提供了三個特殊的引用類型:String、Number和 Boolean。

基本包裝類型就是把簡單資料類型包裝成為複雜資料類型,這樣基本資料類型就有了屬性和方法。

// 下面代碼有什麼問題?
var str = 'andy';
console.log(str.length);      

按道理基本資料類型是沒有屬性和方法的,而對象才有屬性和方法,但上面代碼卻可以執行,這是因為js 會把基本資料類型包裝為複雜資料類型,其執行過程如下 :

// 1. 生成臨時變量,把簡單類型包裝為複雜資料類型
var temp = new String('andy');
// 2. 指派給我們聲明的字元變量
str = temp;
// 3. 銷毀臨時變量
temp = null;      

字元串的不可變

指的是裡面的值不可變,雖然看上去可以改變内容,但其實是位址變了,記憶體中新開辟了一個記憶體空間。嗯,我覺得這個和Java很像

​ 當重新給字元串變量指派的時候,變量之前儲存的字元串不會被修改,依然在記憶體中重新給字元串指派,會重新在記憶體中開辟空間,這個特點就是字元串的不可變。

​ 🌂: 由于字元串的不可變,在大量拼接字元串的時候會有效率問題

根據字元傳回位置

字元串通過基本包裝類型可以調用部分方法來操作字元串,以下是傳回指定字元的位置的方法:

我的Javascript學習-------基礎篇(十一)(關于字元串對象的學習)

案例:查找字元串"abcoefoxyozzopp"中所有o出現的位置以及次數

// 查找字元串"abcoefoxyozzopp"中所有o出現的位置以及次數
// 核心算法:先查找第一個o出現的位置
// 然後 隻要indexOf 傳回的結果不是 -1 就繼續往後查找
// 因為indexOf 隻能查找到第一個,是以後面的查找,一定是目前索引加1,進而繼續查找
   var str = "oabcoefoxyozzopp";
   var index = str.indexOf('o');
   var num = 0;
   // console.log(index);
   while (index !== -1) {
        console.log(index);
        num++;
        index = str.indexOf('o', index + 1);
}
  console.log('o出現的次數是: ' + num);      

下圖來自​​w3school​​​

​indexof​

​的參數

我的Javascript學習-------基礎篇(十一)(關于字元串對象的學習)

根據位置傳回字元

字元串通過基本包裝類型可以調用部分方法來操作字元串,以下是根據位置傳回指定位置上的字元:

我的Javascript學習-------基礎篇(十一)(關于字元串對象的學習)

案例:判斷一個字元串 ‘abcoefoxyozzopp’ 中出現次數最多的字元,并統計其次數

// 核心算法:利用 charAt() 周遊這個字元串
// 把每個字元都存儲給對象, 如果對象沒有該屬性,就為1,如果存在了就 +1
// 周遊對象,得到最大值和該字元
var str = 'abcoefoxyozzopp';
var o = {};
for (var i = 0; i < str.length; i++) {
    var chars = str.charAt(i); // chars 是 字元串的每一個字元
    if (o[chars]) { // o[chars] 得到的是屬性值
        o[chars]++;
    } else {
       o[chars] = 1;
    }
}
console.log(o);      

🐻:在周遊的過程中,把字元串中的每個字元作為對象的屬性存儲在對象總,對應的屬性值是該字元出現的次數

字元串操作方法

字元串通過基本包裝類型可以調用部分方法來操作字元串,以下是部分操作方法:

我的Javascript學習-------基礎篇(十一)(關于字元串對象的學習)

replace()方法

replace() 方法用于在字元串中用一些字元替換另一些字元,其使用格式如下:

字元串.replace(被替換的字元串, 要替換為的字元串);      

split()方法

split()方法用于切分字元串,它可以将字元串切分為數組。在切分完畢之後,傳回的是一個新數組。

字元串.split("分割字元")