Js中的數組
(一)數組類型檢測的方法
因爲用typeof來檢測數組類型,獲得的是「object」,因此根本不能真正準確地檢測出數組類型,能夠自定義下面一種方法:
var is_array = function(value){
return value && typeof value === "object" && value.constructor === Array;
};
可是,上面的函數在識別從不一樣的window或者frame中構造的數組時會失效,要想準確地檢測外部數組類型,還須要進一步地完善該函數
var is_array = function(value){
return value &&
typeof value === 'object' &&
value.constructor === Array &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
下面這種方法也能夠檢測出來,並且更加簡潔:
var is_array = function(value){
return Object.prototype.toString.apply(value) ==='[object Array]';
};
(二)刪除數組元素的方法
刪除數組元素有方法有不少種,最簡單的方法就是利用length屬性來截斷數組,可是這種方法比較笨拙,僅可以在尾部截斷數組元素,在JavaScript中,因爲數組其實就是對象,所以使用delete運算符能夠從數組中移除元素。
例如:var number = [1,2,3,4,5,6];
delete number[2]; //1,2,undefined,4,5,6
這種刪除數組的方法,只能刪除指定位置下標的元素,而且會在數組中遺留一個空洞,這是由於排在被刪除元素以後的元素僅保留了它們最初的名字(下標位置),而咱們一般須要後面元素的下標值能夠依次減一,也就是向前排一位。
這種效果能夠用splice方法來實現,splice方法的第一個參數是數組中的一個序號,第二個參數是要刪除的元素個數,任何額外的參數都會在序號那個點的位置被插入到數組中,例如:
var number = [1,2,3,4,5,6];
number.splice(2,1);//1,2,4,5,6
(三)數組的排序函數sort()
按從小到大進行排序數組:
function f(a,b){
return a-b;
}
var arr = [1,2,3,4,5,6];
arr.sort(f);
按從大到小對數組進行排序:
function f(a,b){
return b-a;
}
var arr = [1,2,3,4,5,6];
arr.sort(f);
實現偶數排在前面,奇數排在後面:
function f(a,b){
var a = a % 2;
var b = b % 2;
if(a==0) return -1;
if(b==0) return 1;
}
var arr = [1,4,5,6,1,3,7,8];
arr.sort(f);
console.log(arr);
若須要奇數排在前面,偶數排在後面:
function f(a,b){
var a = a % 2;
var b = b % 2;
if(a==0) return 1;
if(b==0) return -1;
}
var arr = [1,4,5,6,1,3,7,8];
arr.sort(f);
console.log(arr);
不區分字母大小進行排序:
function f (a,b){
var a = a.toLowerCase;
var b = b.toLowerCase;
if(a < b){
return;
}else{
return -1;
}
}
var arr = ["aB","Ab","Ba","bA"];
arr.sort(f);
(四)數組的下標
在JavaScript中,數組下標不必定必須是大於或者等於0的整數,能夠爲任意表達式,甚至能夠是任意類型數據,可是使用length屬性檢測的時候,返回值爲0,說明數組並無增長長度,可是使用數組下標仍然能夠獲得相應的數組元素值,例如:
var a = [];
a[name] = 'Tom';
alert(a.length); // 0
alert(a[name]); // Tom
(五)使用arguments模擬重載
在javas中,每一個函數內部均可以使用arguments對象,該對象包含了函數被調用時的實際參數值,arguments對象雖然在功能上和數組有些相似,可是它不是數組,arguments對象與數組的相似體如今他有一個length屬性,同時實際參數的值能夠經過[]操做符來獲取,可是arguments對象並無數組可使用的push,pop,splice等方法,其緣由是arguments對象的prototype只想的是object.prototype,而不死Array.prototype.
其餘語言都支持方法重載,可是JavaScript並不支持這種方式的重載,這是由於JavaScript中的function對象也是以屬性的形式出現的,在一個對象中增長與已有function同名的新function時,舊的function對象會被新的覆蓋,不過能夠經過使用arguments來模擬重載,其實現機制是經過判斷arguments中實際參數的個數和類型來執行不一樣的邏輯。
例如:
funtion sayHello(){
switch(arguments.length){
case 0:
return "hello";
break;
case 1:
return "hello"+ arguments[0];
break;
case 2:
return "hello"+ arguments[0] + arguments[1];
break;
}
}
java