欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js中將具有數(shù)字屬性名的對(duì)象轉(zhuǎn)換為數(shù)組

 更新時(shí)間:2011年03月06日 00:01:00   作者:  
js中將具有數(shù)字屬性名的對(duì)象轉(zhuǎn)換為數(shù)組,雖然不太常用,但我們的確可以給對(duì)象添加以數(shù)字為屬性名的屬性
雖然不太常用,但我們的確可以給對(duì)象添加以數(shù)字為屬性名的屬性:
復(fù)制代碼 代碼如下:

var obj = {};
obj[0] = 1;
obj[1] = 2;

這個(gè)對(duì)象并不是數(shù)組類型,那有沒有辦法把它轉(zhuǎn)換為數(shù)組類型呢?jQuery代碼中采用了Array.prototype.slice把這種對(duì)象轉(zhuǎn)換為數(shù)組,但我試了好幾遍,就是不行:
復(fù)制代碼 代碼如下:

var obj = {};
obj[0] = 1;
obj[1] = 2;
alert(Array.prototype.slice.call(obj));

上面這段代碼在IE下直接報(bào)錯(cuò),在Firefox下雖然沒有報(bào)錯(cuò),輸出內(nèi)容卻是空。也就說,轉(zhuǎn)換失敗了。這種內(nèi)置方法的問題最好還是查查ECMA-262,slice方法的執(zhí)行流程的前兩步如下:
復(fù)制代碼 代碼如下:

1. Let A be a new array created as if by the expression new Array().
2. Call the [[Get]] method of this object with argument "length".

這里提到了參數(shù)length。obj對(duì)象雖然有數(shù)字索引,但是卻沒有l(wèi)ength屬性。其實(shí)問題就在這:slice方法不知道這個(gè)對(duì)象的長(zhǎng)度。簡(jiǎn)單修改一下代碼,添加length屬性:
復(fù)制代碼 代碼如下:

var obj = {};
obj[0] = 1;
obj[1] = 2;
obj.length = 2;
alert(Array.prototype.slice.call(obj));

輸出內(nèi)容是"1,2",復(fù)制成功。那是不是說明,只要調(diào)用slice方法的this有數(shù)字索引和length屬性,就可以轉(zhuǎn)換為數(shù)組呢?。

這個(gè)定律在大部分瀏覽器下成立。然而,在IE環(huán)境下,對(duì)于HtmlCollection這樣的DOM元素集合,即使具有上述特征,它在調(diào)用slice的時(shí)候也會(huì)報(bào)錯(cuò)。

相關(guān)文章

最新評(píng)論