【发布时间】:2012-11-22 09:33:50
【问题描述】:
我在 NodeJS 上遇到了一个非常奇怪的 Javascript 错误。
我有一个巨大的 data.json 文件 (24MB)。我通过阅读它
var data = JSON.parse(fs.readFileSync("./data.json", 'utf8'));
但是,在脚本执行期间的某个时刻,我尝试访问,例如,
data['someProp']['prop1']
它会引发类型错误:
TypeError: 无法读取未定义的属性“prop1”
真的很奇怪,因为data、data['someProp']、data['someProp']['prop1']都被定义了。
如果我这样做
console.log(data['someProp']['prop1']);
它正确在屏幕上显示data['someProp']['prop1']的值并立即引发类型错误。
什么可能导致这种奇怪的行为?有任何猜测或提示可以解决此类问题吗?
更新:
让我更清楚一点。我觉得很奇怪,因为如果我把
console.log(data['someProp']['prop1']);
在它引发错误的正上方的行中,它正确打印出值并立即引发错误。
假设data['someProp']['prop1'] = "someProp value"。
那么这是错误日志。
someProp value
console.log(data['someProp']['prop1']);
^
TypeError: Cannot read property 'prop1' of undefined
如果我这样做了
console.log(data['someProp'])
那么这是我得到的日志:
{
...
"someProp": {
"prop1": "someProp value"
},
...
}
undefined
这是我感到困惑的部分。当我 console.log 它时,它会打印出 data['someProp'] 的内容,紧接着是 undefined。这是什么原因造成的?
另一个奇怪的事情是
console.log(typeof data['someProp']);
结果是:
object
undefined
data['someProp'] 怎么能像 undefined 一样成为对象?
【问题讨论】:
-
"...在脚本执行过程中的某个时刻..." 这似乎是关键,不是吗。如果它告诉您它是
undefined,那么这意味着它是undefined。要么在定义之前运行代码,要么错误地访问属性。无论哪种方式,都无法从您提供的内容中得知问题。 -
看看这个问题,它有一个函数可以调用n层的属性,如果为null则返回空字符串。 stackoverflow.com/questions/13345449/…
-
你能逐字发布一些代码吗?
-
console.log的返回值为undefined。这不是正在记录的内容的一部分。如果你做console.log("foo"),你会得到"foo" undefined。关于您的问题,我们需要一个工作示例来了解发生了什么。似乎可能有一些异步代码在播放 -
@user1689607 嘿,正如您所猜到的,代码涉及一些异步代码。而我刚才在调试的时候,发现当我调用done()回调的时候,并没有返回。我修复了这些异步问题,现在问题已解决。谢谢!
标签: javascript node.js undefined-behavior