接口日志里躺着一行参数:event=[object PointerEvent]。前端说传的是坐标,后端说收到一串看不懂的字。翻代码,问题出在一句字符串拼接上,把整个事件对象塞进了模板里。

它为什么长这样

JavaScript 里对象转字符串会默认调用 toString,普通对象得到 [object Object],事件对象则是 [object PointerEvent]。所以只要做了加号拼接、塞进 data 属性、写进地址栏参数,就会看到这串字。它不是报错,是类型用错了。

取值要具体到字段

事件对象上有用的东西都在属性里:type、clientX、clientY、pointerId、target。要记日志就打这些,别打整个对象。想看全貌就直接 console.log 输出,不要拼字符串。

el.addEventListener('pointerdown', (e) => { console.log(e.type, e.clientX, e.clientY); });

几个容易踩的坑

用 JSON.stringify 序列化事件对象会得到一对空花括号,因为属性挂在原型上,不算自有属性。dataset 只能存字符串,塞对象进去同样变成这串字。postMessage 直接传事件对象会抛错,得先挑出需要的字段再传。

  • 调试时控制台里的对象是活的,展开才求值,别拿旧日志判断。
  • 要发坐标给后端,明确传一个只含 x 和 y 的普通对象,再序列化。
  • React 的合成事件用完会回收,异步里取值前先解构出来。

判断办法很直接:代码里出现把 e 直接拼进字符串、塞进属性或者整个序列化的地方,就是病根。改成取具体字段,这串字就再也不会出现。