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。