国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js中將具有數字屬性名的對象轉換為數組

2019-11-20 23:54:52
字體:
來源:轉載
供稿:網友
雖然不太常用,但我們的確可以給對象添加以數字為屬性名的屬性:
復制代碼 代碼如下:

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

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

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

上面這段代碼在IE下直接報錯,在Firefox下雖然沒有報錯,輸出內容卻是空。也就說,轉換失敗了。這種內置方法的問題最好還是查查ECMA-262,slice方法的執行流程的前兩步如下:
復制代碼 代碼如下:

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".

這里提到了參數length。obj對象雖然有數字索引,但是卻沒有length屬性。其實問題就在這:slice方法不知道這個對象的長度。簡單修改一下代碼,添加length屬性:
復制代碼 代碼如下:

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

輸出內容是"1,2",復制成功。那是不是說明,只要調用slice方法的this有數字索引和length屬性,就可以轉換為數組呢?。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武安市| 山丹县| 贡嘎县| 门头沟区| 康乐县| 明星| 玉屏| 五常市| 莒南县| 扶绥县| 盐津县| 北碚区| 弥渡县| 会同县| 平阴县| 友谊县| 华蓥市| 郸城县| 海门市| 开阳县| 房产| 五台县| 济宁市| 隆子县| 绥阳县| 江孜县| 平果县| 武汉市| 阿图什市| 鞍山市| 广平县| 株洲县| 峡江县| 东丰县| 淳化县| 桦甸市| 苍南县| 韶山市| 浮山县| 长治市| 泽普县|