在以下功能中多次发生异常,在我们用户的(Chrome)浏览器中运行。 NB代码缩小了,我刚刚为readabilily添加了换行符。
function a(c, b, e, f) {
for (var d in b) {
if (c && _.isObject(b[d]) === true && _.isArray(b[d]) === false) {
a(c[d], b[d], e, d + ".")
} else {
if (!c || _.isEqual(c[d], b[d]) === false) {
e.push({
name: f + d,
value: b[d]
})
}
}
}
return e
}
例外是:TypeError: Cannot read property 'beginning' of null
到目前为止,我的分析是这样的:
beginning
是d
变量的值之一(a
b
)的财产。 b[d]
或c[d]
for
循环内,c
可以为空,但不是b
(b null =>无循环)null
c
c
为null
,我们必须采用else
路径c
为null
,!c
是真实的,那么_.isEqual(...)
应该不进行评估(请参阅Is that js expression safe: if( !x || doSomething( x[prop], y[prop] ) === false ))。 那时,我的理由已陷入死胡同。不应该例外。我可能在某个地方犯了一个错误,但在哪里?
注意:问题似乎要修复(我无法重现它,所以我无法确定),只需更改代码,添加一个单独的'是c null ?在if ... else之前测试,但那不是很令人满意。