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制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
JS控制按钮10秒钟后可用的方法
Dec 22 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
Angular 表单控件示例代码
Jun 26 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
jQuery pagination分页示例详解
Oct 23 jQuery
vue 使用v-for进行循环的实例代码详解
Feb 19 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
在php MYSQL中插入当前时间
2008/04/06 PHP
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
函授自我鉴定范文
2014/02/06 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
租房安全协议书
2014/08/20 职场文书
贷款收入证明格式
2015/06/24 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
小学四年级作文之写景
2019/08/23 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers