js中將具有數(shù)字屬性名的對象轉(zhuǎn)換為數(shù)組
var obj = {};
obj[0] = 1;
obj[1] = 2;
這個對象并不是數(shù)組類型,那有沒有辦法把它轉(zhuǎn)換為數(shù)組類型呢?jQuery代碼中采用了Array.prototype.slice把這種對象轉(zhuǎn)換為數(shù)組,但我試了好幾遍,就是不行:
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í)行流程的前兩步如下:
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屬性:
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)文章
EasyUI閃屏EasyUI頁面加載提示(原理+代碼+效果圖)
這篇文章主要介紹了EasyUI閃屏EasyUI頁面加載提示(原理+代碼+效果圖)的相關(guān)資料,需要的朋友可以參考下2016-02-02詳解addEventListener的三個參數(shù)之useCapture
本文主要給大家介紹的是addEventListener的三個參數(shù)之中的useCapture參數(shù)的使用及示例分享,有需要的小伙伴參考下2015-03-03基于javascript實現(xiàn)判斷移動終端瀏覽器版本信息
這篇文章主要介紹了基于javascript實現(xiàn)判斷移動終端瀏覽器版本信息,需要的朋友可以參考下2014-12-12windows系統(tǒng)下簡單nodejs安裝及環(huán)境配置
相信對于很多關(guān)注javascript發(fā)展的同學(xué)來說,nodejs已經(jīng)不是一個陌生的詞眼,這里不想談太多的nodejs的相關(guān)信息。只說一下,windows系統(tǒng)下簡單nodejs環(huán)境配置2013-01-01js設(shè)置document.domain實現(xiàn)跨域的注意點分析
這篇文章主要介紹了js設(shè)置document.domain實現(xiàn)跨域的注意點,較為詳細的分析了document.domain跨域的相關(guān)技巧,需要的朋友可以參考下2015-05-05