1. 程式人生 > >js引用類型

js引用類型

return 數據 iou .so set ava 開始 locale -c

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引用類型