为什么我得到“;未捕获的类型错误:无法读取属性'nodeName'“为空”;在我的剧本中

Why am I getting "Uncaught TypeError: Cannot read property 'nodeName' of null" in my script?

本文关键字:为空 nodeName 属性 我的 读取 为什么 错误 类型      更新时间:2023-09-26

我正在使用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 );
      }
    }
  };

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

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

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