2011-11-12 24 views
18

¿Cómo debo modificar estas líneas para hacer feliz a jshint?¿Por qué jshint no reconoce una tarea como una expresión?

Una asignación es una expresión. ¿Por qué no puedo entender 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. 
+0

¿Cómo echo a bool? –

Respuesta

19

Si realmente desea escuchar JSHint, convertir la expresión a un valor lógico por:

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. 

Así, !! significa: Convierte algo a la representación condicional.

+0

más fácil ... así que fui con esto. –

+0

¿Tiene javascipt una suerte de bool ... algo más directo? –

+0

@ stack.user.0 Más directo que '!!'? Eso es lo más directo posible: JavaScript tiene truthy/falsy, si quieres un booleano real, '!!' es tu apuesta más fácil. –

19
/*jshint boss:true */ 

Experimento con el options.

13

Estoy seguro de que jshint entiende bien la expresión, es solo que la mayoría de las personas que escriben if (a = b) significaron realmente if (a == b) y esto genera una advertencia.

Debido a que su código es lo que pretende usted podría agregar una prueba explícita:

while ((element_iterator = element_iterator.nextSibling) !== null) { ... } 
0

Es una expresión, y se puede modificar para que funcione con JSHint (aunque no es agradable), así:

while(element_iterator.nextSibling) { 
    element_iterator = element_iterator.nextSibling; 

Para su último ejemplo. Sin embargo, no necesitas hacer esto. JSHint es solo una herramienta para ayudarte a mejorar los hábitos de codificación y corregir errores, pero dado que lo que tienes es claro, conciso y (en mi opinión) la mejor manera de hacerlo, simplemente ignora esos mensajes.

0

jshint no puede decir si realmente destinado a realizar una cesión en el bloque de estado, o si se suponía que realmente ser una comparación. La preocupación sería que otros humanos puedan tener la misma duda.

En el caso de un iterador, creo que estás bien.

0

tuve este error porque tenía una coma final en una declaración anterior a la función:

this.foo = "bar", // <- Error was here 

this.myfunc = function() { 
    ... // <- Error reported on this line 
}; 

(que era difícil de encontrar, pero refuerza mi opinión de que borra de suelen tener razón, es mi código que es equivocada Si hubiera desactivado las advertencias a nivel mundial -. o incluso en ese lugar - el insecto todavía habría estado presente </lecture>)

+0

Esta no es la misma advertencia que en esta pregunta. Este es [W030] (https://github.com/jshint/jshint/blob/78b79c099fc490d93cd7aef599a1528761e9498d/src/messages.js#L112) y la pregunta se refiere a [W084] (https://github.com/jshint/jshint /blob/78b79c099fc490d93cd7aef599a1528761e9498d/src/messages.js#L171). Si bien es similar, esto es irrelevante aquí. –

3

Hay al menos dos maneras de resolver el error reportado, según JSHint docs..

  1. Añadir /*jshint boss:true */ antes de sentencia condicional
  2. comunicado Wrap paréntesis extra, es decir, while ((element_iterator = element_iterator.nextSibling)) {...}

personal, creo que le rodea con sus paréntesis adicionales es la mejor práctica, ya que mantiene la comprobación de errores, pero aún tiene sentido en código. Agregar el !! antes no hace más que convertir la expresión a verdadero/falso dos veces más.

+0

Sin embargo, vale la pena señalar que la advertencia sobre "sombreado variable", especialmente en el caso del bucle for. referencia: http://jshint.com/docs/options/#shadow – PageYe

Cuestiones relacionadas