1. 程式人生 > >《JavaScript語言精粹》--第6章:陣列

《JavaScript語言精粹》--第6章:陣列

/*
	JS沒有像其他語言陣列一樣的資料結構,它提供了一種擁有一些類陣列特性的物件
	陣列字面量:
		JS允許陣列包含任意混合型別的值
*/
var someArray = [
	1,
		"alpha",
	true, {
		name: "obj"
	},
	function() {
		console.log("function");
	}
];
console.log(someArray);
//輸出:
//[1, "alpha", true, Object, function]

//----------------------------------------------------------------------------------------

/*
	長度:
		每個陣列都有一個length屬性,如果用大於或等於當前length的數字作為下表來儲存一個元素,那麼length值將會被增大以容納新元素,不會發生陣列越界錯誤
		可以直接設定length的值,設定更大的length不會給陣列分配更多的空間,而吧length設小將導致所有下標大於等於新length的屬性將被刪除
*/

var names = ["Tom", "Jerry", "Edison", "Howard", "Kobe"];
console.log(names);
//輸出:
//["Tom", "Jerry", "Edison", "Howard", "Kobe"] 
names.length = 7;
console.log(names);
//輸出:
//["Tom", "Jerry", "Edison", "Howard", "Kobe"] 
names.length = 3;
console.log(names[3]);
console.log(names);
//輸出:
//undefined
//["Tom", "Jerry", "Edison"]

//----------------------------------------------------------------------------------------

/*
	刪除:
		delete運算子可以用來從陣列中移除元素,但不幸的是那樣會在陣列中留下一個空洞
		JS中有個splice方法,可以刪除一些元素並將它們替換為其他元素
			第一個引數時陣列中的一個序號
			第二個引數時要刪除的元素個數
*/

var array4Delete = ["Tom", "Jerry", "Edison", "Howard", "Kobe"];
array4Delete.splice(2, 1);
console.log(array4Delete);
//輸出:
//["Tom", "Jerry", "Howard", "Kobe"] 

//----------------------------------------------------------------------------------------

/*
	列舉:
		for in語句可以用來遍歷一個數組的所有屬性,但無法保證屬性的順序,而且可能會從原型鏈中獲得屬性
*/

//----------------------------------------------------------------------------------------

/*
	容易混淆的地方:
		當屬性名是小而連續的整數時,使用陣列,否則使用物件
		typeof運算子判定陣列為'object'
			應該使用如下方法進行判定:Object.prototype.toString.apply(value) === '[Object Array]'
*/
console.log(typeof []);
//輸出:
//object
console.log(Object.prototype.toString.apply([]) === '[object Array]');
console.log(Object.prototype.toString.apply({}) === '[object Array]');
//輸出:
//true
//false

//----------------------------------------------------------------------------------------

/*
	指定初始值:
		當訪問一個不存在的元素,得到的值為undefined

*/