for条件可以省略"el &&"吗?

Can "el &&" be omitted from the for condition?

function parents(element, selector) {
  for (let el = element; el && el !== document; el = el.parentNode) {
    if (el.matches(selector)) {
      return el;
    }
  }
  return null;
}
parents(anyChild, '#inexistent');

现实生活中是否存在需要 el && 的情况,或者我可以只留下 el !== document 部分?

我想不出任何一个,除非我不传递元素或传递无效元素。

如果调用 parents 时使用的有效元素不在 DOM 中,您需要该条件以防止出错。

考虑:

const div = document.createElement("div");
div.innerHTML = "<span><span class='foo'></span></span>";
const span = div.querySelector(".foo");
// ...
const blah = parents(span, ".blah");

parentNode 将达到 null,而无需先成为 === document。同样:

const div = document.getElementById(".something");
div.remove(); // Or on older browsers: div.parentNode.removeChild(div);
const blah = parents(div, ".blah");

旁注:您所拥有的实际上是 closest 方法。如果您必须支持过时的浏览器,您可能会考虑只使用它,并使用一个好的 polyfill。