This article解释了为什么我使用以下代码会发出警告:

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");
}

但这无关于“为什么在一段时间内对赋值表达有不好的做法? »。

我还阅读了这个stackoverflow answers,指出这种做法很好。所以...

类似while (element = element.parentNode)的语法存在性能问题,或者仅仅是样式代码的建议?

顺便说一句,---i运算符似乎也是一种不好的做法。我read in this article:



这是个 Jest 吗?

最佳答案

它应该不存在性能问题(可以说,由于CPU管道的问题,带前缀增量的索引可能比后缀增量的索引稍慢;这是一个微优化,非常可笑,以至于在JS引擎开销的情况下几乎毫无意义。 ,即使在C语言中,编译器也可以对表达式进行重新排序(如果可以确保不会在等待增量时停止)。

无论哪种方式,在条件条件下反对赋值的主要论点基本上是,在大多数情况下,这是一个错误(您的意思是==或JS中的===)。如果将分配包装在附加的parens层中,则某些代码检查器(C#要求将此作为语言功能以避免意外)会得到满足,例如,“是的,我真的是要分配”(当您重新将赋值的结果与其他值进行比较;省略括号将进行比较,然后分配一个 bool(boolean) 值,这更有可能是错误的)。

有些人讨厌用作较大表达式的一部分的递增/递减运算符,因为我猜想记住操作的顺序很困难,而且因为众所周知C程序员编写了诸如++*++var之类的可怕东西。我不理these这些人。只是不要将其用于棘手的事情。

09-30 16:39
查看更多