《JavaScript語言精粹》學習筆記——8.方法

JavaScript 提供數組、函數、數字、對象、字符串標準類型的標準方法集。

1、數組(Array)

array.concat(item...)

concat 方法產生一個新數組,包含 array 的淺複製和附加在後面的一個或多個item參數,並不改變原數組的值。如果一個 item 參數是數組,它的每個元素會被分別添加。

<pre name="code" class="javascript">var a = ['a', 'b', 'c'];
var b = ['x', 'y', 'z'];var c = a.concat(b, true);// c =['a', 'b', 'c', 'x', 'y', 'z', true];

array.join(separator)

join 方法把 array 構造成一個字符串。先把 array 中的每個元素變爲一個字符串,再用 separator 分隔符把他們連接起來。默認的分隔符是逗號 ',' 。

var a = ['a', 'b', 'c'];
var c = a.join(' ');  // c 是 'abc'

array.pop()

pop方法移除array中的最後一個元素並返回該元素。如果array是empty,會返回 undefined 。

var a = ['a', 'b', 'c'];
var c = a.pop();  //  a 是 ['a', 'b']  c 是 'c'  // 改變了數組,返回了移除的值

array.push(item...)

push方法把一個或多個item參數添加到array數組的尾部,改變了這個數組的內容,並返回數組的新長度值。每個參數item都作爲單個元素添加到數組中。

var a = ['a', 'b', 'c'];
var b = ['x', 'y', 'z'];
var c = a.push(b, true);
//  a = ['a', 'b', 'c', ['x', 'y', 'z'], true];
//  c = 5;
array.reverse()

reverse 方法反轉 array 中的元素,並返回 array 本身。

var a = ['a', 'b', 'c'];
var b = a.reverse();
//  a 和 b 都是 ['c', 'b', 'a']
array.shift()

shift 方法移除數組 array 中的第一個元素並返回該元素。 如果數組是空的,會返回 undefined。

var a = ['a', 'b', 'c'];
var c = a.shift();  // a 是 ['b', 'c']  &  c 是 'a'
array.slice(start, end)

slice 方法對 array 中的一段做淺複製,從 array[start] 開始複製,一直到 array[end]。start 默認值是 0 ,end 默認值是數組長度。如果 start 或 end 爲負數,則 array.length 會和參數相加,如若還爲負數則取值 0 。如果 start 大於 array.length 或 start 等於 end ,則返回空數組。

var a = ['a', 'b', 'c'];
var b = a.slice(0, 1);  // b 是 ['a']<pre name="code" class="javascript">var c = a.slice(1);     // c 是 ['b', 'c']
var d = a.slice(1, 2);  // d 是 ['b']

array.sort(comparefn)

sort 方法對 array 中的內容進行排序,JavaScript 的默認比較函數把要排序的對象都視爲字符串。不能對一組數字正確排序。

var n = [4, 8, 15, 16, 23, 42];
n.sort()   // n 是 [15, 16, 23, 4, 42, 8]
可以用自己的比較函數替換默認比較函數。默認比較函數接受 2 個參數,兩個參數相等時返回 0 ,如果第一個參數應排在前面時,返回一個負數 ,如果第二個參數應排在前面,返回一個正數。

對數字正確排序:

n.sort( function (a, b) {
     return a - b;
});
<pre name="code" class="javascript">// n 是[4, 8, 15, 16, 23, 42]

對包含任意簡單值的數組排序:

var m = ['aa', 'bb', 'a', 4, 8, 15, 16, 23, 42];
m.sort ( function (a, b){
       if (a ===b) {
              return 0;
       }
       if ( type of a === type of b) {
              return a < b ? -1 : 1;
       }
       return typeof a < typeof b ? -1 : 1;
})
//  m 是 [ 4, 8, 15, 16, 23, 42, 'a', 'aa', 'bb'];
使對象數組按照對象中的某個屬性排序,構造比較函數的函數:

var m = ['aa', 'bb', 'a', 4, 8, 15, 16, 23, 42];<pre name="code" class="javascript">var by = function (name) {
      return function (o, p) {
var a, b;
if (typeof o === 'object' && typeof p === 'object' && o && p){
              a = o[name];
              b = p[name];
if (a === b) { return 0; } if ( typeof a === typeof b) { return a < b ? -1 : 1; } } else {
              throw {
                  name : 'Error',
                  message : 'Expected an object when sorting by ' + name
              };
          }
     };
};
//  使用方法  s.sort(by('first')).sort(by('last'));

sort方法是不穩定的,即兩個值相等還是有可能改變數組的順序,因此如果對多個鍵值排序採用以下的方法:

var m = ['aa', 'bb', 'a', 4, 8, 15, 16, 23, 42];
var by = function (name, minor) {
      return function (o, p) {
          var a, b;
          if (typeof o === 'object' && typeof p === 'object' && o && p){
              a = o[name];
              b = p[name];
              if (a === b) {
                  return typeof minor === 'function' ? minor(o, p) : 0;
              }
              if ( typeof a === typeof b) {
                  return a < b ? -1 : 1;
              }
          } else {
              throw {
                  name : 'Error',
                  message : 'Expected an object when sorting by ' + name
              };
          }
     };
};
//  使用方法  s.sort(by('first',by('last')));
array.splice(start, deleteCount, item...)

splice 方法從 array 的 start 位置開始移除 deleteCount (1個或多個) 個元素,並用新的 item 替換它們。返回一個包含移除元素的數組。

var a = ['a', 'b', 'c'];
var r = a.splice(1, 1, 'ache', 'bug');
<pre name="code" class="javascript">//  a 是 ['a', 'ache', 'bug', 'c'];
// r 是 ['b'];

array.unshift(item...)

unshift 方法類似於 push 方法,將元素添加到數組中,返回數組的新長度,不同的是將元素插在數組的最前面。

var a = ['a', 'b', 'c'];
var r = a.unshift('ache', 'bug');
<pre name="code" class="javascript">//  a 是 ['ache', 'bug', 'a', 'b', 'c'];
// r 是 5;

數組的方法總結,

三個添加元素方法,push(加到數組最後面)、unshift(加到數組最前面)、concat(數組和參數組合成新數組返回)

三個刪除元素方法,pop(刪除最後一個)、shift(刪除第一個)、splice(刪除指定的幾個連續元素,並用新的替換)

複製方法,slice(複製其中的連續幾個元素)

反轉方法,reverse

排序方法,sort(可以更改默認的排序函數)

拼接爲字符串方法,join(使用separator參數將元素連接起來)

2、函數

function.apply(thisArg, argArray)

apply 方法調用 function,傳遞一個會被綁定在 this 上的參數和一個可選數組作爲參數。

3、數字

number.toExponential( fractionDigits )
toExponential 方法把 number 轉換成一個指數形式的字符串。fractionDigits 參數是可選的,控制小數點後的數字位數,範圍在 0 ~ 20。無參數不改變小數位。

document.writeln(Math.PI.toExponential(0));
document.writeln(Math.PI.toExponential(2));
document.writeln(Math.PI.toExponential());

// 結果

3e+0
3.14e+0
3.141592653589793e+0

number.toFixed( fractionDigits )

toFixed 方法把 number 轉換成一個十進制形式的字符串。fractionDigits 參數是可選的,控制小數點後的數字位數,範圍在 0 ~ 20,默認是 0

document.writeln(Math.PI.<span style="font-size:18px;">toFixed</span>(0));
document.writeln(Math.PI.<span style="font-size:18px;">toFixed</span>(2));
document.writeln(Math.PI.<span style="font-size:18px;">toFixed</span>());

// 結果

3
3.14
3

number.toPrecision( precision)

toPrecision 方法把 number 轉換成一個十進制形式的字符串。precision 參數是可選的,控制數字精度,範圍在 1 ~ 21。無參數不改變數字精度。

<pre name="code" class="javascript">document.writeln(Math.PI.<span style="font-size:18px;">toPrecision</span>(2));
document.writeln(Math.PI.<span style="font-size:18px;">toPrecision</span>(7));
document.writeln(Math.PI.<span style="font-size:18px;">toPrecision</span>());

// 結果

3.1
3.141593<pre name="code" class="javascript">3.141592653589793


number.toString( radix )

toString 方法把 number 轉換成一個字符串。radix 參數是可選的,控制基數,範圍在 2 ~ 36,通常爲整數,可以爲任意數字。默認值是10。

document.writeln(Math.PI.toString(8));
document.writeln(Math.PI.toString(16));
document.writeln(Math.PI.toString());

// 結果

3.1103755242102643
3.243f6a8885a3
3.141592653589793
4、對象

object.hasOwnProperty(name)

如果對象是否包含一個名爲 name 的屬性,返回ture。不檢查原型鏈中是否包同名屬性。如果屬性名就是 ‘hasOwnProperty’,則不起作用,會返回false。
5、字符串

string.charAt(pos)

charAt 方法返回在 string 中 pos 位置處的字符。如果 pos 不合法(小於0 或者大於等於字符串的長度),會返回一個空字符串。

var name = 'Curly';
var initial = name.charAt(0);  // initial 是 'C'
string.charCodeAt(pos)

charAt 方法返回在 string 中 pos 位置處的字符的字符碼位。如果 pos 不合法(小於0 或者大於等於字符串的長度),會返回NaN。

var name = 'Curly';
var initial = name.charCodeAt(0);  // initial 是 67
string.indexOf(searchString, position) indexOf 方法在 string 中查找字符串 searchString,如果查找到則返回第一個匹配字符的位置,如果沒有查找到則返回 -1。可選參數position 可設置從 string 的指定位置開始向後查找 。

var text = 'Mississippi';
var p = text.indexOf('ss');      // p 是 2
p = text.indexOf('ss', 3);       // p 是 5
p = text.indexOf('ss', 6);       // p 是 -1

string.lastIndexOf(searchString, position)

lastIndexOf 方法與 indexOf 方法類似,只不過是從字符串的末尾開始查找。可選參數 position 可設置從 string 的指定位置開始向前查找 。

var text = 'Mississippi';
var p = text.lastIndexOf('ss');      // p 是 5
p = text.lastIndexOf('ss', 3);       // p 是 2
p = text.lastIndexOf('ss', 6);       // p 是 5
string.localeCompare(that)

localeCompare 比較兩個字符串,如果string 小於 that,則結果爲 -1,如果相等,結果爲 0。類似於數組 sort 方法的默認比較函數。

string.match(regexp)

match 方法讓字符串和一個正則表達式進行匹配。如果 regexp 包含 g 標識,生成一個包含所有匹配(除捕獲分組之外)的數組。

string.replace(searchValue, replaceValue)

replace 方法在string 中查找 searchValue 字符串,替換爲 replaceValue 字符串,並返回一個新的字符串。如果 searchValue 是一個字符串,僅在第一次出現的時候被替換;如果 searchValue 是一個正則表達式,並帶有g標識,則會替換所有的匹配。

string.search(regexp)

search 方法和 indexOf 方法類似,只是參數是正則表達式,如果找到匹配,返回第一個匹配的首字符位置,沒有找到匹配,則返回 -1 。忽略參數的 g 標識,且沒有 position 參數。

string.slice(start, end)

slice 方法複製 string 的一部分字符構造一個新的字符串。用法與 Array.slice 方法相一致。

var text = 'and in it he says "Any damn fool could';
var a = text.slice(18);
<pre name="code" class="javascript">// a 是 '"Any damn fool could'
var b = text.slice(0, 3);// b 是 'and'var c = text.slice(-5);// c 是 'could'

string.split(separator, limit)

split 方法根據 separator 將 string 分割成片段來創建一個字符串數組。可選參數 limit 是限制分割的數量。separator 可以是一個正則表達式或字符串。

如果 separator 是一個空字符,返回一個單字符的數組:

var digits = '0123456789';
var a = digits.split(' ', 5);
// a 是 ['0', '1', '2', '3', '4']

分隔符兩邊的每個單元文本都會被複制到數組中:

var c = '|a|b|c|'.split('|');
// c 是 [' ', 'a', 'b', 'c', ' '];
此方法會忽略 g 標識。

string.toLocaleLowerCase()

toLocaleLowerCase 方法返回一個新字符串,使用本地化規則將string中的所有字母轉換爲小寫格式。主要用在土耳其語上。

string.toLocaleUpperCase()

toLocaleUpperCase 方法返回一個新字符串,使用本地化規則將string中的所有字母轉換爲大寫格式。主要用在土耳其語上。

string.toLowerCase()

toLowerCase 方法返回一個新字符串,將string中的所有字母轉換爲小寫格式。

string.toUpperCase()

toUpperCase 方法返回一個新字符串,將string中的所有字母轉換爲大寫格式。

String.fromCharCode(char...)

String.fromCharCode 根據一串數字編碼返回一個字符串

var a = String.fromCharCode(67, 97, 116);
// a 是 'Cat'
字符串方法總結

根據位置獲取一個字符或編碼:charAt(獲取字符)、charCodeAt(獲取字符編碼)

字符編碼轉字符:String.fromCharCode(根據字符編碼轉字符串)

查找字符:indexOf(從前往後找)、lastIndexOf(從後往前找)、match(找正則表達式)、search(找正則表達式)、replace(查找後替換爲新字符串)

複製:slice(從 start 複製到 end 的字符串)

轉爲數組:split(將字符串根據分隔符創建數組)

字母大小寫轉換:toLocaleLowerCase(本地規則轉小寫)、toLocaleUpperCase(本地規則轉大寫)、toLowerCase(轉小寫)、toUpperCase(轉大寫

字符串方法中,忽略了 concat 方法和 substring 方法,concat 方法用 '+' 運算符替代,substring 方法用 slice 完全可以實現其功能。



















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