本文解释了为什么在使用像这样的代码时会出现警告:
var htmlCollection = document.getElementsByClassName("class-name"),
i = htmlCollection.length,
htmlElement;
// Because htmlCollection is Live, we use a reverse iteration.
while (htmlElement = htmlCollection[--i]) { // **Warning?! Why?!**
htmlElement.classList.remove("class-name");
}
但是这并没有说明“为什么在while条件中赋值表达式是一种不好的做法?”。
我也看到了Stack Overflow的答案,认为这种做法是好的。那么...
while (element = element.parentNode)
语法是否存在性能问题或只是一种代码风格建议?
顺便提一下,“--i”运算符也是一种不好的做法。我在这篇文章中看到:
++(增量)和--(减量)运算符因鼓励过度狡猾而被认为对糟糕的代码有所贡献。
可能这是某种玩笑吧?
=
而不是==
的错误指出来是有意义的。但是关于赋值性能(而不是前缀/后缀递增性能),也没有性能问题吗? - Bruno J. S. Lesieurwhile ((htmlElement = htmlCollection[--i]) !== undefined)
,这可能会为JS JIT-er提供足够的信息来将表达式优化为简单的指针比较,但同样,在JS开销的情况下,这是一个微小的优化,不太可能产生影响。 - ShadowRanger