JavaScript備忘錄(1)——內置類型

JavaScript有一些內置類型,還有不少經常使用的內置的方法,本文稍做總結,以備查閱。前端

值類型

個人理解,值類型是分配在棧上的,而引用類型(固然也包括引用類型內部的值類型)是分配在堆上的。值類型是不能夠改變的,好比:正則表達式

var s = "hello";
s = "hello2";

上述並無將字符串"hello"改爲"hello2",而是新建立了一個字符串"hello2",前一個字符串仍然存在(只不過沒法訪問了),並於當前做用域被回收時銷燬。數組

值類型很簡單,有五種:undefined,null,boolean,number,string,都經過字面量來建立。有兩點須要注意瀏覽器

  • 值類型沒有方法,諸如3.1415.toFixed(2)或者"hello".toUpperCase()的用法,實際上都已經對值類型進行了包裝。
  • undefined和null的區別:前者一般表示一個不存在的/非法的值類型變量,後者表示一個不存在的/非法的引用類型變量。
  • number支持八進制012和十六進制0xA的字面值。

包裝類型

在值類型變量上調用函數或方法,瀏覽器會事先對其進行包裝爲對象,而後調用該對象的相關方法,如3.1415.toFixed(2),就是先把值類型包裝爲內置的Number類型,而後調用Number類型的toFixed方法。咱們也能夠顯式地進行手動包裝:函數

var n = new Number(3.1415);

包裝類型的實例能夠看作是臨時對象,在調用過須要的函數後就不能再訪問了,所以其上的方法不會影響變量原先的值。好比:編碼

var x = 3.1416;
x.name = "PI";    // var tmpx = new Numer(x);
                  // tmpx.name = "PI";
console.log(x.name);

 包裝類型有不少有用的內置方法:spa

Number

在值類型變量或字面量(爲方便,舉例都在字面量上直接調用,下同)上調用方法:code

  • toFixed(n):指定小數位數,如21.628.toFixed(2)返回"21.628"。
  • toExponential(n):指定小數位數並以科學計數法輸出,如21.628.toExponential(2)返回"2.16e+1"
  • toPrecision(n):指定有效數字位數,如21.628.toPrecision(4)返回"21.63"。若是精度不到個位,以科學計數法表示,如21.628.toPrecision(1)返回"2e+1"。

注意,以上三個方法返回的都是字符串。對象

String

在值類型變量或字面量上調用方法:blog

  • charAt(i):返回字符串中指定位置的字符(返回的類型仍是字符串),如"hello".charAt(1)返回"e"。
  • charCodeAt(i):返回指定位置字符編碼,如"hello".charCodeAt(1)返回"101"。
  • concat(arguments):鏈接字符串,接收任意多個參數。如"hello".concat(" world", "!")返回"hello world!"。但實際上,咱們更常使用+運算符鏈接字符串。
  • slice(i1, i2):返回指定兩個索引值間的字串,如"hello world".slice(3, 7)返回"lo w"。若是i2沒有指定,默認爲最後一個字符的索引值。
  • substring(i, n):返回從指定索引值開始,具備某個長度的子串,如"hello world".substring(3, 7)返回"lo worl"。若是n沒有指定,效果與slice一致。
  • substr(i1, i2):與slice(i1, i2)相同。惟一區別在於索引值i爲負的時候,如"hello".substr(-3, 4)會被轉化爲"hello".substr(5-3, 4)返回"ll",而substr(-3, 4)會被轉爲"hello".substr(0, 4)返回"hell"。
  • indexOf(s, i):從索引值i的位置順序搜索字符串,返回子串第一次出現的位置,若不設定i,默認爲0。
  • lastIndexOf(s, i):從索引值i的位置逆序搜索字符串,返回子串第一次出現的位置,若不設定i,默認爲length-1。
  • trim():刪除全部前置和後置的空格,如"  hello world! ".trim()會返回"hello world!"。
  • toLowerCase和toUpperCase():大小寫轉換,如"Hello".toUpperCase()會返回"HELLO"。
  • localeCompare(s):字典法比較兩個字符串大小,如"bag".localeCompare("bad")返回1,而"bag".localeCompare("baggage")返回-1。

字符串的模式匹配方法記錄在正則表達式的章節。

引用類型

引用類型,也就是對象(object)。對象能夠經過對象字面量來建立,也能夠經過對象字面量來建立,也能夠經過構造函數來建立。JavaScript的內置對象包括Object,Array, Date, Math, Function,RegExp,它們都繼承自Object類型。繼承的相關知識留在專門章節總結,函數和正則表達式也是。

Object

使用字面量建立的對象就是Object類型。Object類型的方法主要包括,注意其餘內置方法也極可能有相似的方法,他們都(覆蓋式地)繼承自Object方法。

Array

  • 能夠經過字面量[1, "hello", {x:3}]建立數組,也能夠經過構造函數new Array(20)或new Array(1, "hello", {x:3})建立數組。數組內置方法較多:
  • toString(s):以逗號(默認)或其餘分隔符輸出數組(即對數組中每一個元素調用toString()方法並用分隔符相連),如[1, "hello", {x:1}].toString(";")返回"1;hello;[object object]"。
  • push(ele)和pop():從數組尾端壓入或彈出元素。
  • unshift(ele)和shift():從數組前端壓入或彈出元素。
  • reverse():反轉數組。
  • sort(func):升序排序數組,默認將數組中的全部元素轉化爲字符串排序(即便全部元素都是數字),如[10, 1, 5].sort會產生[1, 10, 5]。也能夠利用參數func指定規則,func(v1, v2)若是v1<v2則返回-1(其實負值就行)。
  • concat(arguents):鏈接數組,能夠傳入任意多個參數,如[1, 2].concat(3, [4, 5], 6)會返回[1, 2, 3, 4, 5, 6],注意該函數沒有改變數組自己,而是返回了一個新對象。
  • slice(i1, i2):提取子數組,與String中的slice相似,一樣沒有改變原數組,而是返回了新的對象。
  • splice(i1, i2, ele1, ele2, ele3, ...):強大的方法,能夠刪除、插入、替換數組中的項。
    • 刪除:[1, 2, 3, 4, 5].splice(1, 3)會返回[2, 3, 4]而使原數組變成[1, 5]。
    • 插入:[1, 2, 3].splice(2, 0, -1, -3)會返回[]而使原數組變成[1, 2, -1, -3, 3]。
    • 替換:[1, 2, 3, 4, 5].splice(2, 2, -1, -2)會返回[3, 4]而使原數組變成[1, 2, -1, -2, 5]。
  • indexOf(ele, i)和lastIndexOf(ele, i),返回指定元素的索引值,參考String類型的同名函數。
  • some(func):對每一項執行func,如有一項返回true,該函數返回true。如[1, 2, 3].some(function(ele){return ele<1;})返回false。
  • every(func):數組中的每一項都使func返回true,則返回true。如[1, 2, 3].every(function(ele){return ele<5})返回true。
  • filter(func):返回一個子數組,其中的每一項元素都使func返回true。如[1, 2, 3].filter(func(ele, index){return index%2 == 0;})返回[1, 3]。
  • forEach(func):對每一項元素都執行func,無返回值。如var arr=[]; [1, 2, 3].forEach(function(ele, index){arr.push(index);})返回[0, 1, 2]。
  • map(func):對每一項元素執行func,並返回由返回值構成的數組。如[1, 2, 3].map(function(ele){return -ele;})返回[-1, -2, -3]。
    • 以上五個迭代方法,func的簽名都是func(ele, index, arr),三個參數分別表示數組項、索引值和原數組。若是想改變原數組,可以使用arr[index]。
  • reduce(func, ori):歸併全部項並構建一個最終返回值,func爲歸併方法。如[1,2,3].reduce(function(prev, cur){return prev*2+cur}, -1)返回3,即(((-1)*2+1)*2+2)*2+3。
  • reduceRight(func, initial):迭代從數組尾部開始。
    • 以上兩個歸併方法func的簽名是func(prev, cur, index, arr),分別表示前一項,當前項,索引值和原數組。第一次歸併時,prev取ori,若ori沒有指定,默認爲0。
相關文章
相關標籤/搜索