我想理解JS nullreference异常

时间:2015-12-18 20:52:28

标签: javascript google-chrome underscore.js nullreferenceexception

在以下功能中多次发生异常,在我们用户的(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

到目前为止,我的分析是这样的:

  1. 已知事实:beginningd变量的值之一(a b)的财产。
  2. 因此,在评估b[d]c[d]
  3. 时发生了异常
  4. for循环内,c可以为空,但不是b(b null =>无循环)
  5. 因此,触发该例外的唯一方法是拥有null c
  6. 如果cnull,我们必须采用else路径
  7. 如果cnull!c是真实的,那么_.isEqual(...)应该进行评估(请参阅Is that js expression safe: if( !x || doSomething( x[prop], y[prop] ) === false ))。
  8. 那时,我的理由已陷入死胡同。不应该例外。我可能在某个地方犯了一个错误,但在哪里?

    注意:问题似乎要修复(我无法重现它,所以我无法确定),只需更改代码,添加一个单独的'是c null ?在if ... else之前测试,但那不是很令人满意。

0 个答案:

没有答案