我正在使用API构建一些东西,但它没有很好地记录,所以我在猜测。 我有2个变量: g.nodes和g.edges,当我这样做时:
console.log(g.nodes);
console.log(g.edges);
我得到了g.nodes的输出:
Object {hello: Object, test: Object, test1: Object, test2: Object, test3: Object…}
和g.edges:
[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
我知道g.edges是一个数组,但是什么数据类型是g.nodes?
答案 0 :(得分:2)
g.nodes
的只是一个javascript对象,但您可以将其视为HashMap
或键值对。
,下一个是一个数组或类似于对象的数组,它可以是一个javascript对象,所有键都是数字,也可以是arguments
类型的对象。
关于如何通过:
g.nodes
你可以这样做:
for(var key in g.nodes){
var value = g.nodes[key];
console.log(typeof value);
}
对于数组,最好不要使用第一个迭代方法,因为除了数组的实际数据之外,它还可以迭代Array.prototype
中定义的所有其他属性,例如,如果你添加它:
Array.prototype.myarray_prop = 1;
如果你使用for(var key in obj)
方法,除了实际的数组值,myarray_prop
将显示为一个键,只要我们通常使用数组,我们想要迭代实际的值数组,而不是这些额外的道具,使用for(var key in obj)
;
所以对于g.edges你最好这样做:
for(var i=0;i<g.edges.length;i++){
var edge = g.edges[i];
console.log(typeof edge);
}
答案 1 :(得分:-2)
这是一个有趣的问题。让我们逐一讨论:
console.log(g.nodes);
输出表明这是一个对象。该Object的属性是:
其次是一个对象的数组。这本质上是一个JavaScript对象集合。
不要遇到此类问题的好方法是正确调试脚本。
调试JavaScript的好方法:
每当您觉得自己不了解JavaScript流程时,请在FireFox,FireBug中运行该脚本并在所有重要位置插入断点。然后FireBug将显示每个变量的类型和状态。
调试示例:
function SayHello(){
debugger;
var msg = "Hello World";
console.log(msg);
}
代码将在调试器处停止,您可以从那里看到步骤。你甚至可以看到变量的类型&#34; msg&#34;。
希望这对您有所帮助。