为什么我的脚本中出现“Uncaught TypeError:无法读取null的属性'nodeName'?

时间:2014-10-19 01:25:37

标签: javascript

我正在使用imageUploaded.js库,我在chrome dev中遇到错误。 我已粘贴了下面代码的更大代码片段,但错误在chrome中突出显示的行是:

if ( elem.nodeName === 'img' ) {

我理解基本的js,但不能完全遵循此库中发生的事情,因此我不确定此错误的含义或修复方法。

  ImagesLoaded.prototype = new EventEmitter();

  ImagesLoaded.prototype.options = {};

  ImagesLoaded.prototype.getImages = function() {
    this.images = [];

    // filter & find items if we have an item selector
    for ( var i=0, len = this.elements.length; i < len; i++ ) {
      var elem = this.elements[i];
      // filter siblings
      if ( elem.nodeName === 'img' ) {
        this.addImage( elem );
      }
      // find children
      // no non-element nodes, #143
      var nodeType = elem.nodeType;
      if ( !nodeType || !( nodeType === 1 || nodeType === 9 || nodeType === 11 ) ) {
        continue;
      }
      var childElems = elem.querySelectorAll('img');
      // concat childElems to filterFound array
      for ( var j=0, jLen = childElems.length; j < jLen; j++ ) {
        var img = childElems[j];
        this.addImage( img );
      }
    }
  };

1 个答案:

答案 0 :(得分:1)

由于某种原因,元素的值为null,因此它没有nodeName属性。如果没有看到更多的代码或库,很难说出发生了什么,但是你可以通过首先检查元素本身的值然后检查属性来避免这样的错误:

if ( elem && elem.nodeName === 'img' ) {
    ...
}

此代码的作用:如果elem是假的(包括null),它会自动将条件丢弃为假(这是逻辑AND的行为)。否则,它会继续检查nodeName,就像原始代码一样。