摘要:數(shù)組是一種類數(shù)組的對象,擁有對象的特性。檢測對象是否為數(shù)組眾所周知,不能正確檢測類型。值等于數(shù)組最大的整數(shù)屬性名加。長度為,只包含一個元素的數(shù)組設小值將將會把屬性名大于等于的屬性刪除。下一篇介紹的方法。
Javascript,一門神奇的語言,它的數(shù)組也同樣獨特。我們要去其糟粕,取其精華,把常用的最優(yōu)實踐總結出來。如有錯誤,請指出。
javascript數(shù)組是一種類數(shù)組的對象,擁有對象的特性。當屬性名是小而連續(xù)的整數(shù)時,應該使用數(shù)組,否則,使用對象。
數(shù)組來源所有的數(shù)組都是Array構造出來的,我們來測試一下constructor這個屬性。
var arr = []; arr.constructor === Array; // true arr.constructor === Array.prototype.constructor; // true創(chuàng)建數(shù)組
//數(shù)組字面量方式 var arr1 = [1, 2, 3]; // [1,2,3] //構造函數(shù)方式 var arr2 = new Array(); // [] 空數(shù)組 var arr3 = new Array("9"); // ["9"] 一個字符串元素 var arr4 = new Array(9); // [] 數(shù)組長度length為9 var arr5 = new Array([9]); // [[9]] 相當于二維數(shù)組 var arr6 = new Array(1, 2, 3); // [1, 2, 3] var arr7 = new Array(1, function f(){}, {o : 6}, null,undefined,true); // 數(shù)組可以存儲任意混合數(shù)據(jù)類型
由于arr4的方式,當只有一個數(shù)字參數(shù)傳遞到Array的構造函數(shù)中,構造函數(shù)會返回設置了length屬性的空數(shù)組。所以推薦使用數(shù)組字面量方式,短小而簡潔。
檢測對象是否為數(shù)組var arr1 = [1, 2, 3]; typeof(arr1); // object
眾所周知,typeof不能正確檢測類型。
arr1 instanceof Array; //true
instanceof 方式在一個網(wǎng)頁內(nèi)是沒有問題,一旦嵌套其他網(wǎng)頁,便存在兩個全局作用域,互相調(diào)用時的檢測就會出問題。
Array.isArray(arr1); // true
Array.isArray() 是ECMAScript5 新增的方法,沒有缺陷。唯一的問題是ie8瀏覽器不支持,ie9瀏覽器在嚴格模式下也不支持。
Object.prototype.toString.apply(arr1).slice(8, -1); // Array
最后一種方式是檢測類型的最好方法。
數(shù)組長度數(shù)組的length也是它的屬性,增大length也不會發(fā)生越界錯誤。
length值等于數(shù)組最大的整數(shù)屬性名加1。
var arr1 = []; arr1[9] = 1; // 長度為10,只包含一個元素的數(shù)組
設小值將將會把屬性名大于等于length的屬性刪除。
如果將length值設為0,相當于清空數(shù)組。
var arr2 = [1, 2, 3, 4, 5]; arr2.length = 3; // [1, 2, 3] arr2.length = 0; // []數(shù)組遍歷
遍歷數(shù)組不要使用for in循環(huán)遍歷數(shù)組,因為for in會遍歷原型鏈上的所有屬性,但我們并不需要這么多。推薦使用for循環(huán)的方式。
var arr1 = [1, 2, 3]; arr1.test = 9; //for in 方式 for(var prop in arr1){ cosole.log(prop, arr1[prop]); } // 輸出如下 // 0 1 // 1 2 // 2 3 // test 9 //for循環(huán)方式 for(var i = 0, len = arr1.length; i < len; i++){ console.log(arr1[i]); } //輸出如下 // 1 // 2 // 3
我們看到for in方式多出了一個test值,可以使用hasOwnProperty函數(shù)排除,但那會比for循環(huán)的方式慢很多。
緩存數(shù)組長度很有必要的一步,每次訪問是有性能開銷的(最新的瀏覽器在這方面做了優(yōu)化)。
簡單介紹了Array的相關基礎知識,到這里也算是能對Array有更全面的理解了。下一篇介紹Array的方法。
Javascript雖然有很多不太容易弄懂的地方,隨著長時間的學習,我已經(jīng)慢慢地愛上它了(因為現(xiàn)在沒有妹子讓我愛)。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/78865.html
摘要:返回一個將數(shù)組所有元素用分隔符拼接成的字符串,默認分隔符為逗號。重復的次數(shù)就是數(shù)組長度減一,因為字符串是分隔符。由于數(shù)組本身是對象,擁有方法,利用它也能實現(xiàn)將數(shù)組拼接成一個字符串,只不過分隔符只能是逗號了。 接上一篇《愛上Javascript數(shù)組Array(一)——基礎介紹》,這一篇詳細介紹Array的所有方法。 所有數(shù)組的方法都定義在Array.prototype上,而Array.p...
摘要:通過構造函數(shù)得到的實例對象內(nèi)部會包含一個指向構造函數(shù)的對象的指針。 JavaScript 高級 學習目標: 理解面向對象開發(fā)思想 掌握 JavaScript 面向對象開發(fā)相關模式 掌握在 JavaScript 中使用正則表達式 面向對象介紹 程序中面向對象的基本體現(xiàn) 在 JavaScript 中,所有數(shù)據(jù)類型都可以視為對象,當然也可以自定義對象。自定義的對象數(shù)據(jù)類型就是面向對象中...
摘要:通過構造函數(shù)得到的實例對象內(nèi)部會包含一個指向構造函數(shù)的對象的指針。 JavaScript 高級 學習目標: 理解面向對象開發(fā)思想 掌握 JavaScript 面向對象開發(fā)相關模式 掌握在 JavaScript 中使用正則表達式 面向對象介紹 程序中面向對象的基本體現(xiàn) 在 JavaScript 中,所有數(shù)據(jù)類型都可以視為對象,當然也可以自定義對象。自定義的對象數(shù)據(jù)類型就是面向對象中...
閱讀 2533·2021-11-12 10:34
閱讀 1528·2019-08-29 16:15
閱讀 2746·2019-08-29 15:17
閱讀 1454·2019-08-23 17:09
閱讀 441·2019-08-23 11:37
閱讀 2512·2019-08-23 10:39
閱讀 550·2019-08-22 16:43
閱讀 3175·2019-08-22 14:53