javascript - 记录对象显示所有属性,但单独记录属性显示 'undefined'

标签 javascript object for-loop javascript-objects

我正在尝试将我构建的 PHP 函数移植到 Javascript,并且发现了许多差异,导致了大量额外的工作。我被困在这个问题上,找不到任何逻辑:
X:95.29
年: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?)

}

最让我困惑的是:

  1. curPos 在循环开始之前就获取一个值。其值为 curPos 在最终迭代后应具有的值。

  2. 在循环期间,curPos 和 curPos.X 或 .Y 的控制台日志不会 包含相同的值。

  3. 在循环期间,尽管每次迭代都会更改 .X 和 .Y,但 curPos 的控制台日志始终相同

编辑:@str 对控制台问题给出了正确的解释,但似乎这个问题超出了控制台范围,并且实际上影响了对象值。 使用 JSON.strigify 后我可以看到这个(这很好):

console.log(JSON.stringify(testParse2));
"Xdec":97.99
"Xdec":98.09
"Xdec":98.19

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

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);

关于javascript - 记录对象显示所有属性,但单独记录属性显示 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782999/

相关文章:

javascript - Angular 4 - 如何根据数量和选项的变化计算价格

javascript - Iron Ajax 不将输入数据发布到 php

objective-c - 这个对象会发生什么

java - 如何将字符串替换为一组一个字符

c - 从 C 中的 For 循环返回值

javascript - 如何仅对表的某些行进行排序?

javascript - PHP加载后删除img

Java:无法将 MyClass 分配给对象类型?

c++ - 如何管理指向对象的指针数组?

python - 从迭代器外部将 StopIteration 发送到 for 循环