《JavaScript語言精粹》--第6章:陣列
阿新 • • 發佈:2019-01-24
/* 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 */