js中将具有数字属性名的对象转换为数组
虽然不太常用,但我们的确可以给对象添加以数字为属性名的属性:
代码如下:
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获取函数名称、函数参数、对象属性名称的代码实例
一.获取函数名称的3种实现方法实例1: 在js权威指南中看到的一个方法: Function.prototype.getName = function(){ return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]} 实例2: 如果当前函数是有名函数,则返回其名字,如果是匿名函数则返回被赋值的函数变量名,如果是闭包中匿名函数则返回"anonymous". 复制代码 代码如下: var getFnName
-
获得Javascript对象属性个数的示例代码
如下所示: 复制代码 代码如下: //扩展对象的count方法Object.prototype.count = ( Object.prototype.hasOwnProperty('__count__') ) ? function () { return this.__count__; } : function () { var count = 0; for (var i in this) if (this.hasOwnProperty(i)) { coun
-
javascript window对象属性整理
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus captureEvent enableExternalCapture disableExternalCapture
-
JavaScript中对象属性的添加和删除示例
复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /* * 用.为对象添加属性 用关键字delete删除属性 用[]添加属性 和.的不同 r.name==r["name
-
JavaScript对象的property属性详解
JavaScript中对象的property有三个属性:1.writable.该property是否可写.2.enumerable.当使用for/in语句时,该property是否会被枚举.3.configurable.该property的属性是否可以修改,property是否可以删除. 在ECMAScript 3标准中,上面三个属性的值均为true且不可改:新建对象的property是可写的.可被枚举的.可删除的:而在ECMAScript 5标准中,可通过property的描述对象(prope
-
JS动态给对象添加属性和值的实现方法
如下所示: var obj={}; for(var i=0;i<10;i++){ eval("obj.p"+i+"="+i); } 以上就是小编为大家带来的JS动态给对象添加属性和值的实现方法全部内容了,希望大家多多支持我们~
-
JS实现给对象动态添加属性的方法
本文实例讲述了JS实现给对象动态添加属性的方法.分享给大家供大家参考,具体如下: 在工作用要用到给jd对象动态添加属性的要求,在网上找到了一种解决方式,实例如下: 1.demo var aa="maker"; var bb=123; var lists={}; eval("lists."+aa+"="+bb); eval('('+"lists."+aa+"="+bb+')'); console.log(li
-
jquery动态遍历Json对象的属性和值的方法
1.遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: function(){ alert(this.name+"的密码="+this.pass); } } //遍历person属性包括方法,如果不想显示出方法,可用typeof(person[item])== "function"来判断 for(var item in person){ alert("perso
-
javascript动态添加、修改、删除对象的属性与方法详解
现在介绍如何为一个对象添加.修改或者删除属性和方法.在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为,可以动态添加.修改.删除属性和方法.例如首先使用类Object来创建一个空对象user:var user=new Object(); 1.添加属性这时user 对象没有任何属性和方法,显然没有任何用途.但可以为它动态的添加属性和方法,例如:user
-
javascript检测对象中是否存在某个属性判断方法小结
检测对象中属性的存在与否可以通过几种方法来判断. 1.使用in关键字该方法可以判断对象的自有属性和继承来的属性是否存在. 复制代码 代码如下: var o={x:1}; "x" in o; //true,自有属性存在 "y" in o; //false "toString" in o; //true,是一个继承属性 2.使用对象的hasOwnProperty()方法 该方法只能判断自有属性是否存在,对于继承属性会返回false. 复制代码 代码如
-
js 遍历对象的属性的代码
如: 复制代码 代码如下: Function.prototype.addMethod=function(methodName,func){ if(!this.prototype[methodName]){ this.prototype[methodName]=func;//给原型增加方法,此方法会影响到该类型的实例上 } return this.prototype;//返回原型,此类型实例可以进行链形调用 } function CustomObject(name,value){ this.nam
-
显示js对象所有属性和方法的函数
要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的. 复制代码 代码如下: function ShowObjProperty(Obj) { var PropertyList=''; var PropertyCount=0; for(i in Obj){ if(Obj.i !=null) PropertyList=PropertyList+i+'属性:'+Obj.i+'\r\n'; else PropertyList=PropertyList+i+'方法\r\n'; }
-
遍历json 对象的属性并且动态添加属性的实现
昨天因为公司的一个需求,所以就研究了一下json对象的属性的遍历和动态修改: var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss', hello:function (){ for(var i=0;i<arguments.length;i++){ //在不知参数个数情况下可通过for循环遍历 // arguments这个是js 默认提供 alert("arr["+i+"]="+argumen
随机推荐
- IOS定制属于自己的个性头像
- asp.net URL编码与解码
- 我的论坛源代码(一)
- 平衡二叉树的实现实例
- php实现修改新闻时删除图片的方法
- JSP模板应用指南(下)
- 什么是blob,mysql blob大小配置介绍
- MySQL命令行导出导入数据库实例详解
- JavaScript对象、属性、事件手册集合方便查询
- js 动态为textbox添加下拉框数据源的方法
- 你所要知道JS(DHTML)中的一些技巧
- Windows2000安全配置指南
- android实现获取有线和无线Ip地址的方法
- 浅谈 IPv6 基本技术原理和特点二
- JS小球抛物线轨迹运动的两种实现方法详解
- Linux服务器被黑以后的详细处理步骤
- vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
- python实现网站微信登录的示例代码
- 易语言求正切命令使用讲解
- SpringBoot之瘦身部署的详细步骤