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

送你一条花内裤 发布于 2017/01/11 10:09
阅读 1K+
收藏 0
JS

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

我做的测试:

a.length = 0

a[0]   显示为undefine

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

加载中
0
cisiqo
cisiqo
for (var k in a) { console.log(a) }
送你一条花内裤
送你一条花内裤
不可以啊,这个对象太怪了,怎么都取不出来
cisiqo
cisiqo
// 获取对象长度 function objLength(obj) { var Length = 0; for (var item in obj) { Length++; } return Length; }
0
负心杏
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];

}




负心杏
回复 @Kfly : 在取值之前console.log一下,是不是有值,就可以断定是不是全局、局部变量的问题了。(有值就不是)。 这个问题应该是比较高级的对象问题,属于ES5,或者ES6的范畴(或者原型继承一类,你的输出里面有__proto__)。我尝试Object.create创建数组对象,和var a = [];的表现就不一样,但非专业前端,就不深究了,等待真正高手吧
送你一条花内裤
送你一条花内裤
嗯,你好像看懂我的问题了,这个对象是存在的,我现在不知道怎么操作它,这个对象原来不是这样的,原来是个大小为3个数组,当时当我在一个方法中使用它的时候,它就变成图上的那样了,怎么取也取不出来;(是不是跟全局变量和局部变量有关系,因为它的值是在一个方法中附的值)
负心杏
关注中...
0
1024
1024

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

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

1024
1024
回复 @Kfly : 今天突然又想到这个问题,想到可能和defineProperty有关吧。你可以用getOwnPropertyDescriptor查看下这个数组的length属性,还有如果你用的是console.log来打印的,也查看下console.log的PropertyDescriptor,看看有没有什么么端倪。
送你一条花内裤
送你一条花内裤
回复 @1024 : 我并没有执行a.length=0啊,我是console.log(a.length)//打印的结果为0
1024
1024
回复 @Kfly : 对啊这有什么问题?
送你一条花内裤
送你一条花内裤
是我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
0
您的好友
您的好友

????

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

送你一条花内裤
送你一条花内裤
回复 @您的好友 : 我没有执行a.length=0,我是console.log(a.length)打印的结果为0
您的好友
您的好友
回复 @Kfly : 都说了是清空了 a[0]当然就是不存在了啊 你试试a.length=1 这样a[0]就有了 但是a[1]还是不存在
送你一条花内裤
送你一条花内裤
我没描述清楚,图上的那个对象1 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
0
一碗粉条
一碗粉条
var a=[1,2,3];//数组

console.log(a[0]);//打印

a.length=0;//清空

console.log(a[0]);//打印
送你一条花内裤
送你一条花内裤
我没描述清楚,图上的那个对象 console.log(a.length) //结果为0 console.log(a[0])//结果为undefine
0
littledew
littledew

把你的数组a给出来

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