亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

上面這段代碼在IE下直接報錯,在Firefox下雖然沒有報錯,輸出內(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對象雖然有數(shù)字索引,但是卻沒有l(wèi)ength屬性。其實問題就在這:slice方法不知道這個對象的長度。簡單修改一下代碼,添加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ù)組呢?。

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

相關(guān)文章

最新評論