js一个长度为零,但是又有内容的对象,该怎么遍历
如图,这个对象的结构如图所示,姑且这个对象为a
我做的测试:
a.length = 0
a[0] 显示为undefine
我想对这个对象不进行破坏的情况下,能够对其进行遍历操作,打印或者获取里面那3个内容
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如图,这个对象的结构如图所示,姑且这个对象为a
我做的测试:
a.length = 0
a[0] 显示为undefine
我想对这个对象不进行破坏的情况下,能够对其进行遍历操作,打印或者获取里面那3个内容
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(18)
应该是你的这个数组作用域的问题,我也遇到了这个问题,但在我获取这个数组的方法中就能获取该数组的长度和值,但是我在另一个函数中调用时它就出现了这个问题
我没描述清楚,图上的那个对象1 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
回复
@您的好友 : 我没有执行a.length=0,我是console.log(a.length)打印的结果为0
回复
@Kfly : 都说了是清空了 a[0]当然就是不存在了啊 你试试a.length=1 这样a[0]就有了 但是a[1]还是不存在
????
楼主一看就是js没学好 a.length = 0 会清空数组的
是我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
回复
@Kfly : 对啊这有什么问题?
回复
我并没有执行a.length=0啊,我是console.log(a.length)//打印的结果为0
回复
@Kfly : 今天突然又想到这个问题,想到可能和defineProperty有关吧。你可以用getOwnPropertyDescriptor查看下这个数组的length属性,还有如果你用的是console.log来打印的,也查看下console.log的PropertyDescriptor,看看有没有什么么端倪。
这是个数组啊,直接for循环遍历有什么问题了?
a.length = 0 相当于把数组清空了,a[0]当然等于undefined了。
关注中...
嗯,你好像看懂我的问题了,这个对象是存在的,我现在不知道怎么操作它,这个对象原来不是这样的,原来是个大小为3个数组,当时当我在一个方法中使用它的时候,它就变成图上的那样了,怎么取也取不出来;(是不是跟全局变量和局部变量有关系,因为它的值是在一个方法中附的值)
回复
@Kfly : 在取值之前console.log一下,是不是有值,就可以断定是不是全局、局部变量的问题了。(有值就不是)。 这个问题应该是比较高级的对象问题,属于ES5,或者ES6的范畴(或者原型继承一类,你的输出里面有__proto__)。我尝试Object.create创建数组对象,和var a = [];的表现就不一样,但非专业前端,就不深究了,等待真正高手吧
我再console里面试了下:
数组对象的数组内容(带下标的),和对象内容(属性),都会被for in 循环出来。
对象的属性不能是数字,["0"]也不行,可以从上面看到,o["1"],会直接对数组第二个赋值修改。
感觉你说的不太可能,数组长度为0,却有123的下标属性。我觉得有可能,你循环的时候,a的值已经变了。
或者 1,2,3属性是从父级继承过来的,for in 我记得循环不出来。
// 获取对象长度 function objLength(obj) { var Length = 0; for (var item in obj) { Length++; } return Length; }
不可以啊,这个对象太怪了,怎么都取不出来
for (var k in a) { console.log(a) }