2010-11-12 11 views
16

estoy usando JSLint para asegurar mi JavaScript es "estricta" y estoy consiguiendo el error siguiente:JavaScript: Error - "Esperaba una asignación o llamada de función y en su lugar vio una expresión"?

Expected an assignment or function call and instead saw an expression

En el siguiente código:

(my_var > 0) ? $("#abc").html(my_array.join('')) : $("#abc").html('<h2>Hello ' + persons_name); 

Cualquier idea por qué estoy recibiendo tales ¿un error? Además, estoy usando jQuery como se ve en el código anterior, en caso de que eso haga la diferencia.

Respuesta

14

Supongo que JSLint no está contento ya que está utilizando el operador ternario, y no está haciendo nada con el valor. Refactorizando esto en el equivalente:

if (my_var > 0) { 
    $("#abc").html(my_array.join('')); 
} else { 
    $("#abc").html('<h2>Hello ' + persons_name); 
} 

eliminaría el error. Si por alguna razón usted está realmente conectado a usar el operador ternario, la forma "correcta" de usar sería:

$("#abc").html((my_var > 0) ? my_array.join('') : '<h2>Hello ' + persons_name); 
+0

Ojalá hubiera una opción relajante para usar bitwise && como cheques de tipo bool – SimplGy

8

Creo que esto se debe a que el operador ternario evalúa la expresión y devuelve un valor que se espera asignar. Por ejemplo:

var test = (my_var > 0) ? true : false; 

Sin embargo, lo está usando como una instrucción if/then/else regular. Mientras que el operador ternario funciona si/then/else, tradicionalmente se usa en los destinatarios.

EDITAR: Como una adición: ¿esta declaración tiene sentido para usted?

var foo = 1; 
(my_var > 0) ? true : false; 
console.log('hello world'); 
2

está utilizando una expresión (una expresión utilizando el operador ternario para ser precisos) en una sola línea: su línea está compuesta únicamente de una expresión.

esto se considera una práctica de programación deficiente en muchos idiomas, y podría reescribirse utilizando una declaración if para hacer que esta línea sea más clara.

0

acaba de pedir el mismo Q sin encontrar éste por alguna razón ...

El ternario devuelve un valor que no se está utilizando, por lo que está abusando de la estructura ternaria al no usar el valor (aunque las llamadas de función se realicen según lo previsto).

Cuestiones relacionadas