Pregunta onclick = "doSomething ([object Object])" Uncaught SyntaxError: identificador inesperado


var params = {a:1,b:2}; var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>'; document.write(str);

cuando hago clic en el <a> en la página, lanza "Uncaught SyntaxError: Identificador inesperado". No puedo entender.


5
2017-08-01 05:50


origen


Respuestas:


La razón es que cuando se utiliza la concatenación de cadenas, params está fundido a una cuerda, como resultado obtienes algo como [object Object] entre paréntesis.

Deberías poner params como var params = '{a:1,b:2}';.

Upd.
Como se sugiere en los comentarios, otro enfoque viable está utilizando JSON.stringify:

var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('
    + JSON.stringify(params)
    + ')">aaaa</a>';
document.write(str);

Por favor, preste atención a que JSON.stringify Es posible que no sea compatible con navegadores más antiguos y deberá incluir bibliotecas adicionales para hacerlos funcionar


10
2017-08-01 05:52



[objeto Objeto] es la representación de cadena de cualquier objeto JavaScript. En tu escenario tienes params concatenado con una cadena, que convertirá cualquier tipo de variable en una cadena.


1
2017-08-01 05:52



El en tu caso str Se ve como esto: <a href="#" onclick="doSomething([object Object])">aaaa</a>

Como puede ver, eso no es lo que quiere.


0
2017-08-01 05:55



La respuesta de Li0liQ está bastante bien. Al hacer clic en ese enlace puedes encontrar doSomething[object Object]

Esto es solo un objeto requerido. No estás escribiendo los parámetros en document. Problema de casting.


0
2017-08-01 06:21