1. 數(shù)組
數(shù)組本身是對象,是一種特殊的對象
1.length
數(shù)組不能用點結(jié)構(gòu)讀取
var a = [1,2];
a[0] === 1 //true
a.0 // SyntaxError: Unexpected number
a.length === 2 // true,數(shù)組默認有l(wèi)ength值
a[9] = 10;
a.length === 10 // true,JavaScript還是會認為長度是10,會把中間的值都當作empty
JavaScript用32位整數(shù)保存數(shù)組的長度,所以數(shù)組最多只能存232-1個數(shù),數(shù)組length的值是可以設置的,a.length = 0可以用來清空數(shù)組。
var a = [1,2,3];
a.length = 0;
a // []
length的長度是可以設置的,若length大于原來的值,則多出來的叫空位,讀取空位會返回undefined,用in運算符會返回false。
var a = [1,2,3];
a.length = 10
a[5] // undefined
2 in a // true,in檢測的是key,而不是value和length
3 in a // false,in檢測的是key,而不是值
將數(shù)組的鍵分別設為字符串和小數(shù),結(jié)果都不影響length的值,所以length只和數(shù)字鍵有關(guān)。
var a = [];
a['p'] = 'abc';
a.length === 0 //true
a[2.1] = 'abc';
a.length === 0 //true
如果數(shù)組的鍵名是添加超出范圍的數(shù)值,該鍵名會自動轉(zhuǎn)為字符串。
a[-1] = 'a';
a[Math.pow(2, 32)] = 'b';
a.length === 0 //true
a[-1] === "a" //true
a[4294967296] === "b" //true
2. in
in檢測的是鍵名,而不是值
var arr = [ 'a', 'b', 'c' ];
2 in arr // true
'2' in arr // true
4 in arr // false ,不存在就是false
arr[100] = 'a';
100 in arr // true
99 in arr // false,空位也會被認為是false
3. 遍歷數(shù)組
var colors = ['red', 'green', 'blue'];
colors.forEach(function (color) { //function里的參數(shù)就是每一項的值
console.log(color);
}); //red green blue
用length遍歷數(shù)組時,會把空位輸出為undefined,但使用數(shù)組的forEach方法、for...in結(jié)構(gòu)、以及Object.keys方法進行遍歷,空位都會被跳過,只有當數(shù)組的值是undefined時,它們才會輸出undefined,所以用length遍歷數(shù)組時要小心空位
var a = [ ,2,3];
for(var i=0;i<a.length;i++){
console.log(a[i]); //undefined 2 3
}
a.forEach(function (x, i) { //x是value,i是key
console.log(i + ':' + x); // 1:2 2:3
});
a = [undefined,2,3];
a.forEach(function (x, i) {
console.log(i + ':' + x); // 0:undefined 1:2 2:3
});
4. delete
var a = [1, 2, 3];
delete a[1];
a[1] // undefined
a.length // 3
delete不會影響length,所以用length遍歷數(shù)組的時候要小心
5.類似數(shù)組的對象
可以把類似數(shù)組對象轉(zhuǎn)為真正的數(shù)組(目前看不懂),詳情見阮一峰-數(shù)組-類似數(shù)組的對象
6.
typeof [1,2,3]; // 'object' 注意返回字符串
本文版權(quán)歸彭奕澤和饑人谷所有