js引用類型
1.數組
-在ECMAScript中數組是非常常用的引用類型。ECMAScript所定義的數組和其他語言中的數組有著很大的區別。
首先,數組也是一種對象。
-特點:
-數組是一組數據的組合
-js數組更加類似java的容器,長度可變,元素類型也可以不同
-數組長度隨時可變,隨時可以修改(length屬性)
-常用方法:
-push,pop
-shift,unshift
-splice,slice
-concat,join,sort,reverse等
-位置方法:indexOf,lastIndexOf
-叠代方法:every filter forEach some map
-縮小方法:reduce reduceRight
<script type="text/javascript" charset="UTF-8"> //var arr1 = new Array(); var arr = [1,2,3,4,true,‘abc‘,new date()]; alert(arr.length); // 改變數組長度 arr.length = 5; alert(arr);// 1,2,3,4,true 默認調用了toString,將這個對象轉換成了字符串 var arr2 = []; var result = arr2.push(1,2,true); // 壓棧,返回值是新數組長度 var obj = arr2.pop(); //彈棧,從數組的尾部移除一個元素,返回值是移除的元素內容 var arr3 = [1,2,3,true,new date()]; var result1 = arr3.shift();//移除數組第一個元素,返回值是移除的元素內容 var result2 = arr3.unshift(10,false);// 從頭部插入元素,返回值是數組的長度 var arr4 = [1,2,3,4,5]; // splice 第一個參數表示起始位置,第二個參數表示截取的個數,第三個參數以後表示追加的新元素 // splice操作數組本身 arr4.splice(1,2,3,4,5); //12345->134545 arr4.splice(1,2);//12345->145 arr4.splice(1);//12345->1 var arr5 = [1,2,3,4,5]; // slice不操作數組本身 arr5.slice(2,4);// 12345->34,左閉右開 // 操作數組的方法 // concat方法不操作數組本身 var arr6 = [1,2,3]; var arr7 = [true,4,5]; var result3 = arr6.concat(arr7);// 數組合並操作 // join方法不操作數組本身 var resilt4 = arr6.join(‘-‘);//123->1-2-3 在每個元素之間加入內容 // sort方法操作數組本身 // reverse方法操作數組本身 var arr8 = [1,4,3,5,2]; var arr9 = [10,2,4,1,7]; arr8.reverse();//倒序排序,並非按照大小排序,而是按照元素位置 1,4,3,5,2->2,5,3,4,1 arr9.sort();//正序排序,按照java中string類型比較的方法去比較的,10.2.4.1.7->1,10,2,4,7 // 想要實現自然排序,需要自己寫排序方法。 function compare (value1, value2){ if(value1 < value2) { return -1; } else if(value1 > value2) { return 1; } else { return 0; } } arr8.sort(compare); // 1,4,3,5,2 ->1,2,3,4,5 // 位置方法 var array1 = [1,2,3,4,5,4,3,2,1]; // 比較的時候使用"==="來進行比較,不自動轉換 var value = array1.indexOf(4);// 返回結果為3,返回參數第一次出現的位置 var value1 = array1.indexOf(4,4);// 第一個參數是起始位置,第二個參數是查找的內容,即從起始位置4開始查找第一次元素4出現的位置 var value2 = array1.lastIndexOf(2);//返回7,從後往前查找 // 叠代方法 // every:對數組每一個元素進行一個函數的運行,函數如果都返回為true,最後結果返回true,如果有一個返回false,則結果為false。 var res = array1.every(function(item, index, array) { return item > 2; }); // filter:對於數組的每一個元素也是進行函數的運行,給定的函數去執行,把過濾後的結果返回 var res1 = array1.filter(function(item, index, array) { return item > 2; }); // foreach:循環數組每一項的值,並執行一個方法 array1.foreach(function(item, index, array) { alert(item); }); // map:對數組每個元素進行一個函數的運行,可以經過函數執行完畢後,將新的結果返回 var res2 = array1.map(function(item, index, array) { return item * 3; }); // some:對數組每一個元素進行一個函數的運行,函數如果有一個返回true,則結果為true,如果都為false,結果才為false var res3 = array1.some(function(item, index, array) { return item > 10; }); // 縮小方法 // 第一個參數為前一個值,第二個參數為當前值,第三個參數為當前索引位置,第四個參數是數組本身 var res4 = array1.reduce(function(previous, current, index, array) { return previous + current;//求和 }); // 和reduce方法的區別,reduce方法是從左開始遍歷,reduceRight方法是從右邊開始遍歷 var res5 = array1.reduceRight(function(previous, current, index, array) { return previous + current;//求和 }); </script>
2.Object
1.我們目前為止大多數引用類型都是Object類型的實例,Object也是ECMAScript中使用最多的一種類型。(如同Java.lang.Object一樣,Object類型是所有它的實例的基礎)
-Object類型的創建方式,使用
// Object 類的創建 var obj = new Object(); var obj1 = new Object; // 不建議 var obj2 = {};
-對於Object類型應用for in枚舉循環
2.Object每個實例都會有下列屬性和方法
-Constructor:保存著用於創建當前對象的函數(構造函數)
-hasOwnProperty(propertyName):用於檢測給定的屬性在當前對象實例中(而不是原型中)是否存在
-isPrototypeOf(Object):用於檢查加入的對象是否是另外一個對象的原型
-propertyisElemerable(propertyName):用於檢查給定的屬性是否能夠使用for-in語句來枚舉
-toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應
-toString():返回對象的字符串表示
-valueOf():返回對象的字符串,數值或布爾表示
<script type="text/javascript" charset="UTF-8"> // Object 所有類的基礎類 // Object 類的創建 var obj = new Object(); var obj1 = new Object; // 不建議 var obj2 = {}; // 給對象設置一些屬性 obj.name = ‘zhangsan‘; obj.age = 17; obj.sex = ‘male‘; // 下面的賦值方式,一定要加‘‘ obj[‘birthday‘] = ‘1998-03-21‘; obj.say() = function() { alert(‘hello world‘); }; // 訪問對象的屬性和方法 alert(obj.name); alert(obj.age); obj.say(); // 刪除對象屬性或方法 delete操作符 delete obj.age; delete obj.say; alert(obj.age); // undefind obj.say(); //obj.say is not a function // 如何去遍歷一個js對象 使用for in語句式 for (var item in obj) { alert(item); }// name,sex,birthday會被輸出 for (var item in obj) { alert(obj[item]); }// zhangsan,male,1998-03-21被輸出 // Constructor: 保存對象的創建函數 alert(obj.constructor); // function Object() {[native code]} var arr = []; alert(arr.constructor); // function Array(){[native code]} // hasOwnProperty(propertyName):用於檢測給定屬性在對象中是否存在 obj.hasOwnProperty(‘name‘);// 返回值為boolean類型 // isPrototypeOf(Object): 檢測原型 // propertyEnumerable(propertyNmae):用於檢查給定的屬性是否能通過for in語句來枚舉 obj.propertyEnumerable(‘name‘);// 返回值為true </script>
js引用類型