国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript數組的一些奇葩行為

2019-11-20 10:42:35
字體:
來源:轉載
供稿:網友

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

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

奇葩1:Array()構造器函數可以不使用new關鍵字進行調用:

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

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

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

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

雖然,我不知道他的內部實現機制是什么,但是,猜想他的構造器函數可能是如下定義的:

function Array(args) {//如果,this不是Array的實例的話,//說明不是通過new調用的,則在這里再重新調用if( !this instanceof Array) {return new Array(args);}//后面是正常調用時的實現代碼
//...
}

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

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

var a = new Array(12);console.log(a.length); //12console.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); //4a.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]); //undefinedconsole.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); //falseconsole.log(a.length); //100 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临湘市| 高密市| 镇坪县| 凌海市| 邹城市| 会泽县| 县级市| 兰溪市| 哈巴河县| 犍为县| 南昌市| 兰坪| 溧阳市| 黔南| 永新县| 乌苏市| 乌恰县| 吉首市| 吉木萨尔县| 重庆市| 绥中县| 颍上县| 泰兴市| 汉沽区| 浠水县| 桐庐县| 石首市| 从化市| 西华县| 常州市| 周口市| 安岳县| 藁城市| 平凉市| 上蔡县| 牡丹江市| 宿松县| 车险| 南木林县| 江油市| 阳曲县|