JavaScript中的參考型別
JavaScript中的參考型別
JavaScript中的資料類型有兩種,基本類型與參考型別!基本類型主要包括Boolean、String、Number;參考型別包括Object、Array、Function、Date(常用的)。
參考型別
參考型別的值(對象)是參考型別的一個執行個體。在JS中,參考型別是一種資料結構,用於將資料和功能組織在一起。它也常被稱為類,但這種稱呼並不妥當。儘管JS從技術上講是一門物件導向的語言,但是並不具備傳統的物件導向語言所支援的類和介面等基本結構。參考型別有時候也能被稱為對象定義,因為他們描述的是一類對象所具有的屬性和方法。
Object類型
建立object類型執行個體有兩種方式。第一種是使用new操作符後跟Object建構函式:
var person =new object();person.name="bluce";person.sex="man";person.age=58;
第二種是使用對象字面量標記法,(Key:Value)
var person ={ name:'bluce', sex:'man', age:58}
推薦使用第二種方式,簡潔,代碼量少,有一種封裝資料的感覺。向函數傳遞大量參數的首選方式(前面部落格都採用的這種方式)。
Array類型
Object類型是JS中最常用的資料類型,Array類型僅次之。Array類型有如下特性:
數組的每一項可以檔案類型的資料。{38,’bluce’,{name:’bluce’,sex:’man’}}; 數組長度是動態變化的,類似於java中的泛型
同樣建立數組也有兩種方式,
第一種是使用Array建構函式,代碼如下:
var persons =new Array();var persons=new Array(20);var persons=new Array('bluce','james','jhon');
另外,在使用Array建構函式時也可以省略new操作符。省略操作符的結果和上面代碼結果相同:
var persons = Array();var persons = Array(20);var persons = Array('bluce','james','jhon');
第二種是使用數組字面量標記法,數組由[]包裹,多個資料項目之間以逗號隔開。
var players = [];var players = ['kurry','kobe','james'];
索引與Java、C#等語言一樣,從0開始。item=players[0];
Array 常用方法:
| 方法 |
作用 |
| push() |
添加資料至數組末尾,可以是任意多項;返回修改後數組長度 |
| pop() |
移除數組末尾項,返回移除項;length-1 |
| shift() |
移除數組首項,返回移除項;length-1 |
| unshift() |
在數組前端添加任意多項,並返回修改後數組長度 |
| reverse() |
重排序 |
| sort() |
重排序 |
| concat() |
根據傳入參數重新構建數組 |
| slice() |
分割數組 |
| splice() |
|
| indexOf |
|
| lastIndexOf() |
|
| 迭代方法 |
every()、some()、map()、forEach()、filter() |
方法有些多,後面總結自己常用的一些方法。
Function類型
JS中的函數實際上是對象,每個函數都是Function類型的執行個體,而且都與其他參考型別一樣具有屬性和方法。由於函數是對象,因此函數名實際上也是一個指向函數對象的指標,不會與某個函數綁定(函數無重載)。函數定義由三種方式:
第一種——函式宣告:
function sum(num1,num2){ return num1+num2;}
第二種是函數運算式,下段代碼定義了變數sum並將其初始化為一個函數。
var sum = function(num1,num2){ return num1+num2;};
第三種是使用Function建構函式。Function建構函式可以接收任意數量的參數,但最後一個參數始終被看成是函數體,而前面的參數則枚舉了新函數的參數,例如:
var sum=Function('num1','num2','return num1+num2');
不推薦第三種方式,但這種方式表明函數實際上就是對象。一二兩種方式中函式宣告用的多一些,函數運算式次之。
函數名僅僅是指向函數的指標,因此函數名與包含對象指標的其他變數沒有什麼不同,也就是說一個函數可能會有多個名字。使用不帶圓括弧的函數名是訪問函數的指標,而非調用函數。例如:
function sum(num1,num2){ return num1+num2;} alert(sum(2,2)); //4var anotherSum=sum;alert(anotherSum(2,2));//4sum=null;alert(anotherSum(2,2));//4
函數沒有重載
函數名是指向函數的指標,JS中沒有函數重載的概念
function add(num){ return num+10;}function add(num){ return num+20;}var result=alert(add(10)); //30
上述代碼聲明了兩個同名的函數,其結果是後面的函數覆蓋了前面的函數,以上代碼實質上等同與以下代碼:
var add=function(num){ return num+10;};add =function(num){ return num+20;};var result=alert(add(10)); //30
add只是指標,重複聲明只是改變了add指向的函數。
函數屬性和方法
JS中函數是對象,因此函數也有屬性和方法。每個函數都包含兩個屬性:length和prototype。其中,length屬性工作表示函數希望接收的具名引數的個數。prototype(原型),後面重學js物件導向編程時再著重總結。