点击"doSomething([object Object])"时出现Uncaught SyntaxError: Unexpected identifier错误。

8

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

当我点击页面上的<a>时,它会抛出“Uncaught SyntaxError:Unexpected identifier”错误。我无法理解。

6个回答

13
原因是当使用字符串连接时,params会被转换为字符串,结果你会在括号中得到类似于[object Object]的内容。
你最好将params设置为var params = '{a:1,b:2}';
更新。
如评论中建议的那样,另一个可行的方法是使用JSON.stringify
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('
    + JSON.stringify(params)
    + ')">aaaa</a>';
document.write(str);

请注意,JSON.stringify可能不受较旧的浏览器支持,您需要包含其他库才能使它们正常工作。


1
我想补充一点,如果您无法像示例中所示那样硬编码对象,并且实际上需要将对象转换为字符串,则可以使用JSON.stringify(params)来确保正确的格式。 - kbjr
请注意,根据 http://escape.alf.nu,`%22` 会被解析为 ", 因此将该值传递给 href 而不是 onclick 将导致 XSS 漏洞。 - test30

1

对象是任何JavaScript对象的字符串表示形式。在您的场景中,您将params与字符串连接起来,这将把任何变量类型转换为字符串。


0

0
在您的情况下,str 看起来像这样:<a href="#" onclick="doSomething([object Object])">aaaa</a> 正如您所看到的那样,这不是您想要的。

0

Li0liQ的回答还不错。当你点击那个链接时,你会发现doSomething[object Object]

这只是需要一个对象。你没有将参数写入document。这是一个类型转换问题。


0

遇到了同样的问题。 问题原因:在渲染 HTML 时,params 被转换为字符串 'object Object'。

可以通过以下两种方法解决问题:

方法1:在 js 代码中添加单击处理程序。参见add click handler

方法2:假设我想将名为 'params' 的 JSON 对象传递给 onclick 函数。由于我只需要 'params' 对象的很少属性,所以不会像第一种方法那样添加一个新的处理程序,而是将这些特定参数直接传递如下:

'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接