对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)

有时需要将数组转成伪数组(ArrayLike),如下


代码如下:

var ary = ['one','two','three'];
var obj = {}; // 没有length属性
Array.prototype.push.apply(obj, ary);
for(var i in obj){
alert(i + ': ' + obj[i]);
}

IE8/9/Firefox/Safari/Chrome 依次弹出了obj的key及其value。即能转换成ArrayLike。
但IE6/7下则不能,没有输出任何信息表明obj仍然是个空对象。
如果给obj加个length属性,情况则不同


代码如下:

var ary = ['one','two','three'];
var obj = {length:0}; // 有length,值为0
Array.prototype.push.apply(obj, ary);
for(var i in obj){
alert(i + ': ' + obj[i]);
}

这次IE6/7(所有浏览器)中均弹出了key及其value,都能转换成ArrayLike
注意,length只能赋值为0而非它值,否则得到的对象key和value就不是一一对应的了。


代码如下:

var ary = ['one','two','three'];
var obj = {length:2}; // 有length,非零值
Array.prototype.push.apply(obj, ary);
for(var i in obj){
alert(i + ': ' + obj[i]);
}

(0)

相关推荐

  • javascript中length属性的探索

    例子1: 复制代码 代码如下: var obj={0:'a',1:'b'} alert(obj.length); //undefined var arr=['a','b'] alert(arr.length); // 2 从上面的例子看,类数组对象中的length属性并不和它储存的数据数量直接挂钩,无论是索引属性(0,1)还是length属性都作为对象的普通属性存在,它们之间并没有任何关系,js引擎并不会根据储存数据的数量来自动计算类数组对象的长度. 但是类数组对象的length所确实和存储的数

  • 对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)

    有时需要将数组转成伪数组(ArrayLike),如下 复制代码 代码如下: var ary = ['one','two','three']; var obj = {}; // 没有length属性 Array.prototype.push.apply(obj, ary); for(var i in obj){ alert(i + ': ' + obj[i]); } IE8/9/Firefox/Safari/Chrome 依次弹出了obj的key及其value.即能转换成ArrayLike. 但I

  • jQuery对象的length属性用法实例

    本文实例讲述了jQuery对象的length属性用法.分享给大家供大家参考.具体分析如下: 此属性返回匹配的jQuery对象集合中对象的数目. length属性与size()方法返回相同的值. 语法结构: 复制代码 代码如下: $("selector").length 实例代码: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <m

  • IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理

    昨天在使用Jquery Ui Datapicker做显示签到日历功能的时候,出现了Js问题,在IE8/IE9以及FF.Chrome下都显示正常, 但是在IE6/IE7以及IE8兼容视图下显示有问题,提示"页面上有错误",进一步查看显示错误信息"缺少标识符.字符串或数字", 一开始以为是Jquery 和Jquery Ui的版本不匹配导致的,后来尝试了其他支持的版本也是不行, 然后将自己的Js代码逐段调式,在花了两个多小时后终于以外的发现是由Json最后一个键值后加了逗

  • PHP中把对象数组转换成普通数组的方法

    最近在用ThinkPHP开发一个京东服务市场的应用,然而京东服务市场接口返回的数据是个对象数组.然而需要一个个属性取出来放到数组里面然后再利用ThinkPHP的addAll或者add方法写入数据库.然而每次返回的字段有几十个,每次这么拼接都要崩溃了.果然还是那句话,当你感到无法忍受的时候你就会想办法改变.于是想了下,如果有个函数传个对象数组进去可以自动转成普通数组就好了.因而万能的互联网搜索又来了.百度了一通...果然有前辈已经处理过了,在此记录一下. 复制代码 代码如下: /** * [std

  • js中把JSON字符串转换成JSON对象最好的方法

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析.   第一种解析方式:使用eval函数来解析,并且使用jQuery的each方法来遍历 用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里

  • 在JS中如何把毫秒转换成规定的日期时间格式实例

    最近做的一个项目,从后台查询到日期数据传到前台JS中遍历之后显示的是以"14"开头的毫秒数,刚开始想用"simpleDateFormat"类处理,结果显示都不显示了.后来查了一下资料,感觉其实很简单,下面 把自己的方法分享给大家以供参考. 1.显示的毫秒数 2.处理之前的样式 3.处理之后的样式 Date.prototype.toLocaleString = function() { return this.getFullYear() + "-"

  • c语言将字符串中的小写字母转换成大写字母

    描述 给定一个字符串,将其中所有的小写字母转换成大写字母. 输入 输入一行,包含一个字符串(长度不超过100,可能包含空格). 输出 输出转换后的字符串. 样例输入 helloworld123Ha 样例输出 HELLOWORLD123HA #include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[100001]; char ans[1001]; int now; i

  • IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性

    如设置class属性 复制代码 代码如下: el.setAttribute('class', 'abc'); 在IE6/7中样式"abc"将没有起作用,虽然使用el.getAttribute('class')能取到值"abc". 又如for属性 复制代码 代码如下: <label>姓名:</label><input type="checkbox" id="name"/> <script

  • vue数据对象length属性未定义问题

    目录 数据对象length属性未定义 问题 解决 vue2.x中数组length属性报错 原因 解决方案 数据对象length属性未定义 问题 通过axios得到接口数据,但发现该数据length属性在打印的时候undefined. this.axios.get("/xxx/xxx/xxx/xxxx/process/status?docId=" + this.docId).then((response) => {   if (response.data.code === 0) {

随机推荐