【问题标题】:weird string value in javascriptjavascript中奇怪的字符串值
【发布时间】:2020-08-03 06:20:42
【问题描述】:

我正在研究 Angular,我刚刚遇到了这个奇怪的东西,也许有人可以解释一下这个黑魔法:

  console.log('coordinates', coordinates[30])
  console.log('typeof x', typeof coordinates[30].x)
  console.log('typeof y', typeof coordinates[30].y)
  console.log('y', coordinates[30].y)
  console.log('y.value', coordinates[30].y.value)

chrome 控制台中的结果是

coordinates {x: "13.69", y: "0"}
                  x: "13.69"
                  y: {value: "6.16"}
                  __proto__: Object
typeof x string
typeof y string
y 0
y.value undefined

result screenshot in chrome result screenshot in firefox

坐标数组来自 D3 json 导入,6.16 值似乎来自数组的前一个条目,我不明白如何。

编辑: 我不明白为什么 typeof 返回字符串而不是 Object ?

谢谢

【问题讨论】:

  • 哪一部分神秘?
  • 在哪里找到坐标,它不会使它们浮动。所以你必须将它们解析为像 parseFloat(coordinates[30].x) 这样的浮点数
  • 在控制台中记录对象之前,尝试使用 JSON.stringify(),这是一种更清晰的检查对象内容的方法
  • 他说的是y的值。它显示为 y: "0",即当前值。单击展开箭头,它会显示 y: {value: "6.16"},这是更新之前的先前值。他在问这怎么可能。

标签: javascript angular d3.js


【解决方案1】:

在您的控制台日志中,y 的值为“0”。因此,typeof 调用返回“字符串”。当您稍后在控制台中展开坐标对象时,它会获取其当前值。此时,y 的值为 {value: "6.16"}。如果您此时要记录 y 的 typeof,它将返回“object”。这是一个现场演示:https://jsfiddle.net/michaschwab/gaqbtovk/

const coordinates = {y: "0"};
console.log(coordinates); // shows the updated value on expand, {value: "6.16"}
console.log(typeof coordinates.y); // string

coordinates.y = {value: "6.16"};
console.log(typeof coordinates.y); // object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多