js中将具有数字属性名的对象转换为数组


Posted in Javascript onMarch 06, 2011

虽然不太常用,但我们的确可以给对象添加以数字为属性名的属性:

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的时候也会报错。

Javascript 相关文章推荐
同一页面多个商品倒计时JS 基于面向对象的javascript
Feb 16 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
Sep 14 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
微信小程序 详解页面跳转与返回并回传数据
Feb 13 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
创建简单的node服务器实例(分享)
Jun 23 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 Javascript
js 优化次数过多的循环 考虑到性能问题
Mar 05 #Javascript
淘宝搜索框效果实现分析
Mar 05 #Javascript
再论Javascript下字符串连接的性能
Mar 05 #Javascript
再论Javascript的类继承
Mar 05 #Javascript
Array的push与unshift方法性能比较分析
Mar 05 #Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 #Javascript
判断用户是否在线的代码
Mar 05 #Javascript
You might like
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
php sybase_fetch_array使用方法
2014/04/15 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
php实现留言板功能
2017/03/05 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
二级域名转向类
2006/11/09 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
搞定immutable.js详细说明
2016/05/02 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python编程培训 python培训靠谱吗
2018/01/17 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
中职招生先进个人材料
2014/08/31 职场文书
西岭雪山导游词
2015/02/06 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
新课程改革心得体会
2016/01/22 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js