首頁 >web前端 >js教程 >JavaScript陣列的一些奇葩行為_javascript技巧

JavaScript陣列的一些奇葩行為_javascript技巧

WBOY
WBOY原創
2016-05-16 15:18:301335瀏覽

在程式語言中數組的重要性不言而喻,JavaScript中數組也是最常使用的物件之一,數組是值的有序集合,由於弱類型的原因,JavaScript中數組十分靈活、強大,不像是Java等強型別高階語言陣列只能存放相同型別或其子型元素,JavaScript在同一個陣列中可以存放多種型別的元素,而且是長度也是可以動態調整的,可以隨著資料增加或減少自動對數組長度做更改。

今天,複習了一下JavaScript的數組,然後,把他的一些奇葩行為總結了一下,在這裡和大家share一下,如果有不對的地方,歡迎指出!

奇葩1:Array()建構子函式可以不使用new關鍵字來呼叫:

Array()建構器使用傳遞給他的參數作為數組的元素,從而創建數組,一般的,我們是如下調用的:

var a = new Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 

但是,省略掉new也是可以的,如下:

var a = Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 

雖然,我不知道他的內部實作機制是什麼,但是,猜想他的建構函式可能是如下定義的:

function Array(args) {
//如果,this不是Array的实例的话,
//说明不是通过new调用的,则在这里再重新调用
if( !this instanceof Array) {
return new Array(args);
}//后面是正常调用时的实现代码<br />//...<br />} 

奇葩2:當只傳一個參數給建構子時,行為莫測

如果只傳一個參數,而這個參數是一個整數,將會得到一個數組,並且length等於這個參數

var a = new Array(12);
console.log(a.length); //12
console.log(a); //[] 

如果只傳一個浮點數,就會報錯:

var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…) 

傳遞一個字串就會正常運作,並且該字串作為數組的第一個元素:

var a = new Array("1.1");
console.log(a.length); //
console.log(a); //["1.1"] 

但為了避免二義性,我建議最好是直接使用字面量的形式來建立陣列:

var a = []; //空数组
var a = [1, 1, "bom"]; //三个元素
var a = [12]; //一个元素,并且元素是12 

奇葩3:陣列的length屬性可以被修改(可寫)

如下,我們直接把本來是2的length改成了100,而且還修改成功了! ! !

var a = [1, 2, 3, 4];
console.log(a.length); //4
a.length = 100; 
console.log(a.length); //100 

雖然length等於100,但是,元素a[4]-a[99]是不存在的,並且如果你請求他們的值的話,例如,從0到a.length做一個循環中做的話,那麼會得到undefined。

接下來再看:

var a = [1, 2, 3, 4];
a.length = 100;
console.log(a[10]); //undefined
console.log(99 in a); //false 

與下面的例子有點相似:

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100 

不同之處在於,這裡的a[99]存在了,因為我們創建了它,即使他擁有的是undefined的值。但是從a[4]到a[98]的所有元素則是不存在的,如下:

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(99 in a); //true;
console.log(98 in a); //false
console.log(a.length); //100 

以上所述給大家分享了JavaScript陣列的一些奇葩行為,文章寫的不好還請見諒,謝謝!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn