react - modificar un label con javascript
¿Por qué jshint no reconoce una asignación como una expresión? (8)
¿Cómo necesito modificar estas líneas para hacer feliz a jshint?
Una asignación es una expresión. ¿Por qué jshint no entiende esto? Obviamente el intérprete lo hace.
Line 572: while(bookmark_element=bookmark_list[iterator++])
Expected a conditional expression and instead saw an assignment.
Line 582: while(bookmark_element=bookmark_list[iterator++])
Expected a conditional expression and instead saw an assignment.
Line 623: while(element_iterator=element_iterator.nextSibling)
Expected a conditional expression and instead saw an assignment.
Agregue /* jshint expr: true */
comment en su archivo Javascript, ya no mostrará ninguna advertencia.
Es una expresión, y puedes modificarla para que funcione con JSHint (aunque no es agradable) así:
while(element_iterator.nextSibling) {
element_iterator = element_iterator.nextSibling;
Para tu último ejemplo. Sin embargo, no es necesario hacer esto. JSHint es solo una herramienta para ayudarlo a mejorar los hábitos de codificación y corregir errores, pero dado que lo que tiene es claro, conciso y (en mi opinión) la mejor forma de hacerlo, simplemente ignore esos mensajes.
Estoy seguro de que jshint entiende la expresión bien, es solo que la mayoría de las personas que escriben if (a = b)
realidad significaban if (a == b)
y eso genera una advertencia.
Ya que su código es lo que deseaba, podría agregar una prueba explícita:
while ((element_iterator = element_iterator.nextSibling) !== null) { ... }
Hay al menos dos formas de resolver el error informado, de acuerdo con los documentos de JSHint .
- Agregar
/*jshint boss:true */
antes de la declaración condicional - Envuelva la declaración en paréntesis adicionales, es decir
while ((element_iterator = element_iterator.nextSibling)) {...}
Personalmente, creo que rodear de paréntesis adicionales es la mejor práctica, ya que mantiene el control de errores pero aún así tiene sentido en cuanto al código. Añadiendo el !!
antes, en realidad no hace más que convertir la expresión en verdadero / falso dos veces adicionales.
Si realmente desea escuchar JSHint, convierta la expresión a un booleano mediante:
while (!!(bookmark_element=bookmark_list[iterator++]))
! means: Something that evaluates to true is converted to false,
something that evaluates to false is converted to true.
Entonces !!
Significa: Convertir algo a la representación condicional.
Tuve este error porque tenía una coma al final en una declaración que precede a la función:
this.foo = "bar", // <- Error was here
this.myfunc = function() {
... // <- Error reported on this line
};
(Fue difícil de encontrar, pero refuerza mi opinión de que los linters suelen ser correctos, mi código es incorrecto. Si hubiera desactivado las advertencias a nivel mundial, o incluso en ese lugar, el error aún estaría presente. </lecture>
)
jshint no puede decir si realmente querías hacer una asignación en el bloque de condición, o si realmente se suponía que era una comparación. La preocupación sería que otros humanos pudieran tener la misma duda.
En el caso de un iterador, creo que estás bien.
/*jshint boss:true */
Experimenta con las options .