最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)組的一些奇葩行為

 更新時間:2016年01月25日 11:12:17   作者:宇哥哥  
今天,復習了一下JavaScript的數(shù)組,然后,把他的一些奇葩行為總結(jié)了一下,分享在腳本之家平臺,歡迎大家參考

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

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

奇葩1:Array()構(gòu)造器函數(shù)可以不使用new關鍵字進行調(diào)用:

Array()構(gòu)造器使用傳遞給他的參數(shù)作為數(shù)組的元素,從而創(chuàng)建數(shù)組,一般的,我們是如下調(diào)用的:

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!"] 

雖然,我不知道他的內(nèi)部實現(xiàn)機制是什么,但是,猜想他的構(gòu)造器函數(shù)可能是如下定義的:

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

奇葩2:當只傳一個參數(shù)給構(gòu)造函數(shù)時,行為莫測

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

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

如果只傳一個浮點數(shù),就會報錯:

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

傳遞一個字符串就會正常工作,并且該字符串作為數(shù)組的第一個元素:

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

但是為了避免二義性,我建議最好是是直接使用字面量的形式創(chuàng)建數(shù)組:

var a = []; //空數(shù)組
var a = [1, 1, "bom"]; //三個元素
var a = [12]; //一個元素,并且元素是12 

奇葩3:數(shù)組的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做一個循環(huán)中做的話,那么會得到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]存在了,因為我們創(chuàng)建了它,即使他擁有的是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數(shù)組的一些奇葩行為,文章寫的不好還請見諒,謝謝!

相關文章

最新評論

防城港市| 闽侯县| 正蓝旗| 肃宁县| 温宿县| 银川市| 建昌县| 荣昌县| 四川省| 民和| 台中市| 汾西县| 隆子县| 许昌县| 九龙城区| 禹城市| 体育| 朝阳区| 绩溪县| 滁州市| 潮安县| 汶川县| 高平市| 黄山市| 阿克陶县| 宁安市| 稷山县| 贵定县| 成安县| 雷州市| 西贡区| 平和县| 北辰区| 榆社县| 句容市| 星子县| 广州市| 南川市| 屏东市| 南投市| 汉源县|