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

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

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

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

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

奇葩1:Array()構(gòu)造器函數(shù)可以不使用new關(guān)鍵字進(jìn)行調(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)部實(shí)現(xiàn)機(jī)制是什么,但是,猜想他的構(gòu)造器函數(shù)可能是如下定義的:

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

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

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

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

如果只傳一個(gè)浮點(diǎn)數(shù),就會(huì)報(bào)錯(cuò):

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

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

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"]; //三個(gè)元素
var a = [12]; //一個(gè)元素,并且元素是12 

奇葩3:數(shù)組的length屬性可以被修改(可寫(xiě))

如下,我們直接把本來(lái)是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]是不存在的,并且如果你請(qǐng)求他們的值的話,例如,從0到a.length做一個(gè)循環(huán)中做的話,那么會(huì)得到undefined。

接下來(lái)再看:

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

與下面的例子有點(diǎn)相似:

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

不同之處在于,這里的a[99]存在了,因?yàn)槲覀儎?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ù)組的一些奇葩行為,文章寫(xiě)的不好還請(qǐng)見(jiàn)諒,謝謝!

相關(guān)文章

最新評(píng)論

常熟市| 华坪县| 淮阳县| 大埔县| 济南市| 青浦区| 施秉县| 竹北市| 图们市| 海城市| 宁德市| 霍邱县| 铜鼓县| 卫辉市| 镶黄旗| 永年县| 五指山市| 永仁县| 随州市| 辽宁省| 大厂| 宽甸| 孟州市| 南投县| 高要市| 大竹县| 乌拉特后旗| 五寨县| 淮北市| 馆陶县| 偃师市| 天水市| 铜山县| 定陶县| 铜梁县| 乌鲁木齐市| 永昌县| 商洛市| 永靖县| 探索| 张家口市|