You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

onclick传递对象数组元素到其他函数出现SyntaxError如何解决

问题原因

错误的核心诱因是对象插入模板字符串时的默认序列化规则异常:

  • 你用${array[0]}将对象插入HTML字符串时,JS会自动调用普通对象的toString()方法,{abc:123}执行该方法后返回的值是[object Object]
  • 最终生成的onclick属性代码会变成btnB([object Object]);,完全不符合JS语法规范,浏览器解析时就会抛出Uncaught SyntaxError: Unexpected identifier错误。

解决方法

方法1:JSON序列化转义(适配内联事件写法)

将需要传递的对象转为JSON字符串,同时将onclick属性的边界符改为单引号,避免和JSON内部的双引号产生解析冲突:

function btnA() { 
    const array = [{ abc : 123 }, { def : 456 }]        
    div.innerHTML = `<div onclick='btnB(${JSON.stringify(array[0])});'>`;
    divList.appendChild(div);        
}

如果必须保留内联事件写法,这个方案可以最小改动解决问题

方法2:动态绑定事件(更推荐)

内联事件本身存在可读性差、易出现转义冲突的问题,改用addEventListener绑定事件可以直接传递对象,完全不需要做序列化处理:

function btnA() { 
    const array = [{ abc : 123 }, { def : 456 }]
    const innerDiv = document.createElement('div')
    innerDiv.addEventListener('click', () => btnB(array[0]))
    div.appendChild(innerDiv)
    divList.appendChild(div);        
}

这个方案从根源规避了字符串拼接的转义问题,也符合现代JS的开发规范。

内容的提问来源于stack exchange,提问作者Percival test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:45:00