【天天學3章,一週掌握js】第5章:引用類型

關於引用類型的定義:前端

引用類型的值(對象)是引用類型的一個實例。數組

在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

相關文章
相關標籤/搜索