我在 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
呢?