一、基本類型和引用類型
- 數值、字符串、布爾值、undefined、null可以直接寫出來,比較簡單的數據稱為基本類型,在比較的時候,是直接按值比較。
- 對象、函數、數組復雜的數據是引用類型,在比較的時候,是按照地址比較。
console.log([1] === [1]); var a = [];
var b = a;
console.log(a == b); function fn(stu){stu.name = "張三"; stu = {name:"李四"};
}
var stu = {name:"王五"};
fn(stu);
console.log(stu.name);
復制代碼
二、創建數組
- 創建數組的三種辦法:
new Array()
, Array()
, []
,三種方式創建出來都是一樣的。 - 數組的length可讀可寫。
var arr = [];
var arr = new Array(5);
var arr = Array(1,2,3,5);var arr = [1,2,3,4,5,6,7,8];
arr.length = 0;
console.log(arr);
復制代碼
三、數組的常用方法
indexOf
:查找數組中是否有待查找的數據,返回索引值,若找不到則返回-1,第二個參數表示從字符串中的哪個位置(索引值)開始搜索。使用的是===
,數據類型必須一致,不能是兩個復雜數據類型直接比較,但可以用變量查找。
var arr = [3];
var arr1 = [1,2,3,4,5,arr,7,8];
console.log(arr1.indexOf(arr)); var arr = [1,2,"3",4,5,6,7,8];
console.log(arr.indexOf(3));
console.log(arr.indexOf(4,-1));
復制代碼
concat
:數組的拼接,返回的是一個新數組,不會改變原數組,存儲的引用類型為地址。
var arr = [1,2,3,[4]];
var arr1 = [6,7,8];
var arr2 = arr.concat(arr1);
arr[3][0] = 10;
console.log(arr2);
復制代碼
join
:把數組拼接成字符串,返回新字符串,不會改變原數組,默認用,
拼接,接受傳參為拼接符號。
var arr = [1,2,3,4,5,6];
var str = arr.join('^');
console.log(str);
復制代碼
slice
:提取數組的一部分,生成一個新的數組,不會改變原數組,從索引取到索引[)。
var arr = [1,2,3,4,5,6];
console.log(arr.slice(1,3));
function add(){var arr = [].slice.call(arguments,0);console.log(arr);
}
add(1,2,3)
復制代碼
Array.isArray()
:判斷是否是數組。reverse
:反轉數組,改變原數組。
var arr = [1,2,3];
arr.reverse();
console.log(arr);
復制代碼
四、數組元素的刪除和增加
delete
:會留下空位。
var arr = [1,2,3,4,5,6,7,8];
for(var i=0; i<arr.length; i++){delete arr[i];
}
console.log(arr);
復制代碼
pop
:刪除數組的最后一個元素,并且改變了原數組,返回值為刪除的那個元素,不能傳參。
var arr = [1,2,3,4,5,6];
console.log(arr.pop());
復制代碼
shift
:刪除數組的第一個元素,并且改變了原數組,返回值為刪除的那個元素,不能傳參。
var arr = [1,2,3,4,5,6];
arr.shift();
arr.shift();
console.log(arr);
復制代碼
push
:在末尾添加新元素,可以是多個,用逗號分隔,返回值是新數組的長度。
var arr = [1,2,3,4,5,6];
console.log(arr.push(7,8,[111]));
console.log(arr); var oBox = document.getElementById('box');
var stu = {name:'lisi',age:19};
[].push.call(stu,oBox);
console.log(stu);
復制代碼
unshift
:在開始添加新元素,可以是多個,用逗號分隔,返回值是新數組的長度。
var arr = [1,2,3,4,5,6];
console.log(arr.unshift(7,8,[111]));
console.log(arr);
復制代碼
splice
:刪除/添加元素。arr.splice(index, num, item1, item2.....),index是從哪開始的下標,num是刪除的個數,如果是0就不會刪除,item可選,表示要添加的元素。
var arr = [1,2,3,4,5];
arr.splice(2,2);
console.log(arr);
var arr = [1,2,3,4,5];
arr.splice(2,0,"hello");
console.log(arr);
var arr = [1,2,3,4,5];
arr.splice(2,1,"hello");
console.log(arr);
復制代碼
五、數組的排序
sort
:改變原數組,將原數組轉化為字符串,然后按照Unicode編碼進行排序。
var arr = ['我','wangwu','zhaoliu','qianqi','lucy'];
arr.sort();
console.log(arr);
復制代碼
sort
可以接受一個回調函數,參數是一個函數體,改變排序的規則。
var arr = [156,14,21,2];
arr.sort(function(a,b){return a - b;
});
console.log(arr);
復制代碼
六、數組遍歷的方法
filter
:過濾器,真的留下,假的扔掉。不改變原數組,返回新數組,參數是一個函數。通過自定義的過濾方法,返回新的數組。
var arr = [12,5,8,123,222];
var arr1 = arr.filter(function(item,index,array){return item>12;
})
console.log(arr1);var stu = [{name:'lisi',age:20},{name:'lily',age:18},{name:'lucy',age:22},{name:'hmm',age:30}
];
var newstu = stu.filter(function(item){return item.age>20;
});
console.log(newstu);
復制代碼
map
:遍歷數組,由回調處理之后的一個新的返回值組成數組。
var number = [1,4,9];
var num = number.map(function(item,index,array){return Math.sqrt(item);
});
console.log(num);
復制代碼
forEach
:通過回調處理接收的參數,無返回值。
var number = [1,4,9];
number.forEach(function(item,index,array){console.log(`a[${index}]=${item}`);
})
復制代碼
every
所有為真則為真,some
有一個為真則為真。every
針對所有的回調函數的返回值,如果全為true,則最終結果為true。some
針對所有的回調函數的返回值,有一個true,則最終結果為true。
var arr = [1,2,3,4];var bool = arr.some(function(item){return item%2 === 0;
})
console.log(bool);
復制代碼
七、數組去重
- 使用
filter
去重。
var arr = ['lisi','lucy','lily','hmm','lisi','lisi','hmm','lucy'];
var arr1 = arr.filter(function(item,index,array){return array.indexOf(item) === index;
})
console.log(arr1);
復制代碼
- 從后往前遍歷,取一個值,將這個值和數組中在這個值前面的每一個元素作比較。
var arr = ['lisi','wangwu','hmm','zhaoliu','wangwu','hmm','hmm','lisi'];
for(var i = arr.length-1; i >= 0; i--){for(var j = i-1; j>=0; j-- ){ if (arr[i] === arr[j]) {arr.splice(i,1);}}
}
console.log(arr);
復制代碼
- 從前往后依次遍歷,根據indexOf判斷是不是第一次出現的,若是第一次出現的就是push到新數組。
var arr = [1,2,3,4,5,6,5,4,3,2,1];
var arr2 = [];
for(var i=0;i<arr.length;i++){if( arr2.indexOf( arr[i] ) == -1 ){arr2.push(arr[i]);}
}
alert(arr2);
復制代碼