關於引用類型的定義:前端
引用類型的值(對象)是引用類型的一個實例。數組
在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒。它也一般被稱爲【類】,可是在js中,類這個稱呼並不太穩當。瀏覽器
儘管在技術角度上將,js是一門面向對象的語言,可是嚴格意義上來說,js並不具有面向對象語言所支持的類、接口、繼承等基本屬性。數據結構
引用類型也被稱爲【對象定義】,由於他們描述的是一類對象所具備的屬性和方法。函數
第一節:Object類型spa
Object 能夠說是js中使用最多的一個類型,儘管Object的實例沒有多少功能,可是對於程序中存儲和傳輸數據而言,倒是很是理想的選擇。firefox
建立Object:code
(1)經過new操做符建立:對象
var Obj=new Object(); Obj.a="a"; Obj.b=function (){ //......... }
(2)使用對象字面量建立:這種方式有封裝的感受,並且對於傳輸大量參數很適用排序
var Obj={ a:"a", b: function(){ //............ } }
(3)若是建立時花括號{}留空,則能夠定義只包含其默認屬性和方法的對象。
var Obj = {}; Obj.a = "a"; //......
注意:在經過字面量定義對象時,不會調用Object構造函數 (firefox 除外)
訪問對象屬性的2種方法:
(1)經過 . 操做符進行訪問: Obj.a;
(2)經過 [] 進行訪問: Obj[a];
以上兩種方式沒有任何區別,可是,經過[]訪問的優勢是能夠使用變量,例如:
var Obj={ a:"a", b:"b", } var c="a"; alert( Obj[c] ) // a
第二節:Array 類型
1.用構造函數建立Array對象
(1)使用Array構造函數 : var a=new Array();
(2)若是預先知道數組中的項目的數量,則能夠: var a=new Array( 20 ); 只不過這20項的值都是Undefined
(3)也能夠直接向構造函數傳遞須要建立的項:var a=new Array( "red","blue" );
(4)直接給構造函數傳遞一個數值,會建立數值數量的空項目:var a=new Array( 3 )
(5)建立數組時也能夠省略new操做符:var a= Array( "red","blue" );
2.用字面量建立Array對象
var a=["red","blue","black"];// ok var b=[]; //建立了一個空數組 var d=["red","blue",] //不要這樣,不一樣瀏覽器解釋不通,可能建立了2項或3項 var d=[,,,,,] //不要這樣,不一樣瀏覽器解釋不通,可能建立了5項或6項
3.數組的length屬性
數組的length屬性不是隻讀的,所以能夠經過設置length來從數組的末尾添加或者移除項目:
var a=["red","blue","black"]; a.length=2; // 刪除末尾的項目 alert(a[2])// undefined; var b=["red","blue","black"]; b.length=4; // 在末尾添加一個新項目,默認值未定義 blert(a[4])// undefined; var c=["red","blue","black"]; c[c.length]="orange"; // 在數組末尾直接插入項目,其值爲orange c[10]="white"; //在數組位置10插入項目,其值爲 white, 則4-9位置的項目,默認值都爲undefined
4.轉換方法
全部對象都具備 toString()、toLocaleString()、valueOf() 方法。
其中,調用數組的toString() 和 valueOf() 方法返回相同的值,這會在後臺調用數組每一項的toString()方法,來拼接其最終的字符串。
var a=["red","blue","black"]; alert(a.toString())// 輸出:red,blue,black; alert(a.valueOf())// 輸出:red,blue,black;
join方法:數組的toString()等方法在輸出時,默認用 , 進行分割,利用join能夠指定分割符
var a=["red","blue","green"]; alert(a.join("/")); //輸出 red/blue/green
5.棧方法和隊列方法
(1)push() 接收任意數量的參數,把他們添加到數組的末尾,並返回新數組的長度。
(2)pop() 從數組的末尾移除項目並返回該項目,與push()一塊兒能夠模擬棧操做;
(3)shift() 能夠移除數組第一個項目並返回該項目,與push()一塊兒能夠模擬隊列操做
(4)unshift() 接收任意數量參數,在數組前端添加項目,並返回新數組的長度。
6.重排序方法
(1)reverse() 反轉數組項目的順序
(2)sort() 默認按升序排列數組項目,即最小的在最前面,爲了排序,sort()會調用每一個項目的toString()方法轉爲字符串,而後比較獲得的字符串,已肯定排序
// reverse() var a=[1,2,3,4,5]; var b=a.reverse(); alert(b); // 5,4,3,2,1 // sort() var a=[0,1,5,10,15] var b=a.sort(); alert(b) // 0,1,10,15,5
因而可知,sort()的默認排序並不智能,所幸,sort()能夠接收一個比較函數做爲參數,來實現自定義排序。
function compare(x,y){ if(x<y){//若是第一個參數位於第二個以前,則返回-1; return -1; }else if(x>y){//若是第一個參數位於第二個以後,則返回1; return 1; }else{//若是兩個相等返回0; return 0; } //以上判斷代碼能夠替換爲更簡單的一句 return y-x; }//定義一個比較函數,接收連個參數 var a=[0,1,5,10,15]; a.sort(compare); alert(a);//
reverse() 和 sort() 返回的都是修改後的數組
7.操做方法
(1)concat() 基於當前數組建立一個新的數組,會將接收到的數值或數組的每一項添加到新的數組中
var a=["red","blue"]; var b=a.concat("green","black"); alert(b) // red,blue,green,black var c=a.concat(["green","black"])//接受的參數是數組 alert(c) // red,blue,green,black
(2)slice() 可以基於當前數組建立新數組,接收1個或2個參數,即要返回的項目的起始和結束位置
var a=["red","blue","green","black"]; var b=a.slice(0,2); alert(b); // red,blue,green var c=a.slice(2); alert(c); // green,black
若是slice()參數中有負數,則用數組長度加上負數來肯定其位置,若是開始位置大於結束位置,則返回空數組。
若是是負數,其實能夠理解成從數組末尾開始查找,起始位置變成告終束位置,整個顛倒了..
(3)splice() 能夠說是最強大的數組操做方法了,主要做用是向數組中部插入項目。使用方法有三種:
刪除——能夠刪除任意項,只需指定兩個參數:要刪除的第一項位置,及要刪除的項數;
插入——指定位置插入任意數量的項,至少提供3個參數:起始位置、0(要刪除的項數爲0即爲插入操做)、要插入的項(可爲多項)
替換——指定位置刪除任意數量項目,而且插入任意數量項目,刪除與插入的能夠不相等。至少指定3個參數:起始位置、要刪除的項目數、要插入的項目。
var a=["red","blue","green","black"]; var b=a.splice(0,1); var c=a.splice(1,0,"white","orange"); var d=a.splice(2,2,"white","orange") alert(b); // 刪除第一項 blue,green,black alert(c); // 插入2項 red,blue,white,orange,green,black alert(d); // 替換2項 red,blue,green,white,orange
splice() 始終都會返回一個數組,包含被刪除的項,若是沒有被刪除的,則返回空數組
第三節:Date類型
12