js一个长度为零,但是又有内容的对象,该怎么遍历

发布于 2021-12-03 19:53:50 字数 269 浏览 835 评论 18

如图,这个对象的结构如图所示,姑且这个对象为a

我做的测试:

a.length = 0

a[0]   显示为undefine

我想对这个对象不进行破坏的情况下,能够对其进行遍历操作,打印或者获取里面那3个内容

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(18

偏爱自由 2021-12-06 16:59:20

应该是你的这个数组作用域的问题,我也遇到了这个问题,但在我获取这个数组的方法中就能获取该数组的长度和值,但是我在另一个函数中调用时它就出现了这个问题

后知后觉 2021-12-06 16:59:19

我没描述清楚,图上的那个对象1 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine

半世蒼涼 2021-12-06 16:59:19

我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine

奈何桥上唱咆哮 2021-12-06 16:59:18

回复
@您的好友 : 我没有执行a.length=0,我是console.log(a.length)打印的结果为0

顾挽 2021-12-06 16:59:18

回复
@Kfly : 都说了是清空了 a[0]当然就是不存在了啊 你试试a.length=1 这样a[0]就有了 但是a[1]还是不存在

梦里兽 2021-12-06 16:59:17

????

楼主一看就是js没学好 a.length = 0 会清空数组的

裸钻 2021-12-06 16:59:16

是我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine

躲猫猫 2021-12-06 16:59:10

回复
@Kfly : 对啊这有什么问题?

把回忆走一遍 2021-12-06 16:59:06

回复
我并没有执行a.length=0啊,我是console.log(a.length)//打印的结果为0

天涯离梦残月幽梦 2021-12-06 16:59:03

回复
@Kfly : 今天突然又想到这个问题,想到可能和defineProperty有关吧。你可以用getOwnPropertyDescriptor查看下这个数组的length属性,还有如果你用的是console.log来打印的,也查看下console.log的PropertyDescriptor,看看有没有什么么端倪。

凯凯我们等你回来 2021-12-06 16:58:59

这是个数组啊,直接for循环遍历有什么问题了?

a.length = 0 相当于把数组清空了,a[0]当然等于undefined了。

臻嫒无言 2021-12-06 16:58:57

关注中...

皇甫轩 2021-12-06 16:58:56

嗯,你好像看懂我的问题了,这个对象是存在的,我现在不知道怎么操作它,这个对象原来不是这样的,原来是个大小为3个数组,当时当我在一个方法中使用它的时候,它就变成图上的那样了,怎么取也取不出来;(是不是跟全局变量和局部变量有关系,因为它的值是在一个方法中附的值)

女中豪杰 2021-12-06 16:58:51

回复
@Kfly : 在取值之前console.log一下,是不是有值,就可以断定是不是全局、局部变量的问题了。(有值就不是)。 这个问题应该是比较高级的对象问题,属于ES5,或者ES6的范畴(或者原型继承一类,你的输出里面有__proto__)。我尝试Object.create创建数组对象,和var a = [];的表现就不一样,但非专业前端,就不深究了,等待真正高手吧

网名女生简单气质 2021-12-06 16:16:55
var a = [];
undefined
o = a
[]
o
[]
o.aaa = "sdfsd"
"sdfsd"
o.bbb = "bbb";
"bbb"
o
[]
console.log(o)
VM263:2 [aaa: "sdfsd", bbb: "bbb"]
undefined
o.length;
0
for(var p in o){console.log(p)};
VM349:2 aaa
VM349:2 bbb
undefined
a[0] = "a0"
"a0"
a[1] = "a1"
"a1"
o
["a0", "a1"]
for(var p in o){console.log(p)};
VM407:2 0
VM407:2 1
VM407:2 aaa
VM407:2 bbb
undefined
a.0 = "a.0";a.1 = "a.1";
VM451:2 Uncaught SyntaxError: Unexpected number(…)InjectedScript._evaluateOn @ VM58:904InjectedScript._evaluateAndWrap @ VM58:837InjectedScript.evaluate @ VM58:693
a["0"] = "a.0";a["1"] = "a.1";
"a.1"
o
["a.0", "a.1"]
for(var p in o){console.log(p)};
VM464:2 0
VM464:2 1
VM464:2 aaa
VM464:2 bbb
undefined
a[0]

"a.0"

我再console里面试了下:

数组对象的数组内容(带下标的),和对象内容(属性),都会被for in 循环出来。

对象的属性不能是数字,["0"]也不行,可以从上面看到,o["1"],会直接对数组第二个赋值修改。

感觉你说的不太可能,数组长度为0,却有123的下标属性。我觉得有可能,你循环的时候,a的值已经变了。

或者 1,2,3属性是从父级继承过来的,for in 我记得循环不出来。

for(var p in a){

//p  是属性:1,2,3

//a[p] 是循环值

console.log("a["+p+"]="+a[p];

}

吃颗糖壮壮胆 2021-12-06 07:25:27

// 获取对象长度 function objLength(obj) { var Length = 0; for (var item in obj) { Length++; } return Length; }

顾挽 2021-12-06 03:17:06

不可以啊,这个对象太怪了,怎么都取不出来

草莓味的萝莉 2021-12-05 22:16:58

for (var k in a) { console.log(a) }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文