Javascript 记录对象显示所有属性,但单独记录属性会显示';未定义';

Javascript 记录对象显示所有属性,但单独记录属性会显示';未定义';,javascript,object,for-loop,javascript-objects,Javascript,Object,For Loop,Javascript Objects,我正在尝试将一个PHP函数移植到Javascript中,并发现了许多差异,这些差异导致了大量额外的工作。我被困在这个问题上,找不到任何逻辑: X:95.29 Y:27.39 testParse2.RXdec:0.1 var curPos={}; curPos={}; console.log(curPos); //X:97.19 Y:27.39 (I expect an empty object) console.log(curPos['X']); //undefined (

我正在尝试将一个PHP函数移植到Javascript中,并发现了许多差异,这些差异导致了大量额外的工作。我被困在这个问题上,找不到任何逻辑:
X:95.29
Y:27.39
testParse2.RXdec:0.1

 var curPos={};
 curPos={};
 console.log(curPos);       //X:97.19 Y:27.39 (I expect an empty object)
 console.log(curPos['X']);  //undefined (seems ok but makes no sense with above)
 console.log(curPos['Y']);  //undefined (seems ok but makes no sense with above)

   for(var Ri=0; Ri < 20; Ri++){    

     curPos['X'] = "";
     curPos['Y'] = "";
 console.log(curPos['X']);  // "" (seems ok)
 console.log(curPos['Y']);  // "" (seems ok)
 console.log(curPos);       //X:97.19 Y:27.39
     curPos.X = (((XY(lastPos[AV['A']], 'X')*1)+(testParse2.RXdec*1*Ri)).toFixed(10)*1);
     curPos.Y = (((XY(lastPos[AV['B']], 'Y')*1)+(testParse2.RYdec*1*Ri)).toFixed(10)*1);
 console.log(curPos);   // X:97.19 Y:27.39 (I expect X:95.29 + 0.1 each loop Y:27.39)
 console.log(curPos.X); // 95.29 (correct by why is above different?)
 console.log(curPos.Y); // 27.39 (correct by why is above different?)

}
但现在我尝试将数据传输到其最终数组,但最终数组中填充了“惰性”值:

T['tool'][T['curTool']]['points'][lineID] = testParse2;

console.log(JSON.stringify(T));
"Xdec":98.19,"Ydec":27.39,"curX":323.19,"curY":177.39
"Xdec":98.19,"Ydec":27.39,"curX":323.19,"curY":177.39
"Xdec":98.19,"Ydec":27.39,"curX":323.19,"curY":177.39
如果我停止使用循环中的对象,并切换到变量,则按如下方式构建最终数组:

 T['tool'][T['curTool']]['points'][lineID] = {'curX' : curX,
                                              'curY' : curY,
                                              'TYP'  : 'DR',
                                              'lineID'   : lineID,
                                              'lineName' : lineName,};

如何将循环的特定迭代中的实际对象值发送到不同的数组?

浏览器在记录时惰性地评估对象。因此,当您在循环之后展开它们时,它们将显示它们在展开时拥有的属性,而不是记录对象时拥有的属性

您可以使用

console.log(JSON.stringify(curPos));
而不是

console.log(curPos);

浏览器在日志记录时在中惰性地评估对象。因此,当您在循环之后展开它们时,它们将显示它们在展开时拥有的属性,而不是记录对象时拥有的属性

您可以使用

console.log(JSON.stringify(curPos));
而不是

console.log(curPos);

在第3行中,如果
curPos
不是空的,那么有一些东西你没有给我们看(而且显然看不到你自己)。给定该代码,它实际上将是一个空对象。你的第2行是多余的,你已经在第1行做了。在
var
语句之前检查
curPos
的值。哦,然后在
控制台.log
语句中使用
JSON.stringify(curPos)
立即计算对象的属性值那个如果只执行显示的前5行代码(在新窗口中),您将获得预期的结果。我建议您熟悉浏览器中的交互式JavaScript调试器,而不是仅依赖于
console.log()
语句。您可以在任何一行上设置断点,并在此时此地查看所有变量和对象。然后你可以一步一步地浏览代码,看看每一步都会发生什么。通过这种方式,您可以立即获得有关代码实际执行操作的信息,而不必猜测哪些特定的
console.log()
调用可能有用。您可以初始化对象而不是数组。不能通过curPos['X']获取值,必须先将其转换为object。除此之外,您还有一些其他问题,您再次使用curPos={};要使用调试器,首先将所有代码移到函数中并调用该函数。这样做的原因是为了让您只看到局部变量,而不会看到全局名称空间的混乱。然后放一个
调试器语句;代码将在那里停止,然后您可以单步通过它。在第3行中,如果
curPos
不是空的,那么您没有向我们展示一些东西(显然看不到您自己)。给定该代码,它实际上将是一个空对象。你的第2行是多余的,你已经在第1行做了。在
var
语句之前检查
curPos
的值。哦,然后在
控制台.log
语句中使用
JSON.stringify(curPos)
立即计算对象的属性值那个如果只执行显示的前5行代码(在新窗口中),您将获得预期的结果。我建议您熟悉浏览器中的交互式JavaScript调试器,而不是仅依赖于
console.log()
语句。您可以在任何一行上设置断点,并在此时此地查看所有变量和对象。然后你可以一步一步地浏览代码,看看每一步都会发生什么。通过这种方式,您可以立即获得有关代码实际执行操作的信息,而不必猜测哪些特定的
console.log()
调用可能有用。您可以初始化对象而不是数组。不能通过curPos['X']获取值,必须先将其转换为object。除此之外,您还有一些其他问题,您再次使用curPos={};要使用调试器,首先将所有代码移到函数中并调用该函数。这样做的原因是为了让您只看到局部变量,而不会看到全局名称空间的混乱。然后放一个
调试器语句;代码将停止在那里,然后你可以单步通过它。这是正确的。明天我将尝试让代码再次运行,现在我可以看到正确的控制台输出。如果有人在展望未来,在找到正确的关键词后,我发现了另一个问题。它对不同浏览器中的Javascripts控制台行为以及webkit“bug”的可能性有非常详细的回答。我更新了我的问题。此问题不限于控制台输入。你还有什么见解吗?目前,我已将对象更改为普通变量,并且可以让程序运行。@Nama请添加一个完整的示例。什么是
testParse2
,什么是
T
?这是正确的。明天我将尝试让代码再次运行,现在我可以看到正确的控制台输出。如果有人在展望未来,在找到正确的关键词后,我发现了另一个问题。它对不同浏览器中的Javascripts控制台行为以及webkit“bug”的可能性有非常详细的回答。我更新了我的问题。此问题不限于控制台输入。你还有什么见解吗?目前,我已将对象更改为普通变量,并且可以让程序运行。@Nama请添加一个完整的示例。什么是
testParse2
,什么是
T