为什么JSON.stringify只显示点击事件的isTrusted成员?

13 浏览
0 Comments

为什么JSON.stringify只显示点击事件的isTrusted成员?

HTML:


Javascript:

window.foo = function(event) {
  console.log(JSON.stringify(event));
}

控制台结果:

{"isTrusted":true}

这发生在Chrome浏览器上。我还没有测试其他浏览器。

0
0 Comments

为什么JSON.stringify只显示click事件的isTrusted成员?

有一些原因导致一些属性不会被包含在JSON.stringify中:

1. 它们可能是无法被字符串化的函数。

2. 它们可能属于对象的原型(即类),而不是直接属于对象本身。

如果你需要包含额外的数据,最好的办法是手动构造一个新对象,并包含你想要包含的内容:

window.foo = function(event) {
  console.log(JSON.stringify({keyCode: event.keyCode}));
}

我认为这段代码中有错误:在keyCode前有一个打开的{花括号,但我没有看到一个闭合的花括号。

0
0 Comments

`JSON.stringify`只显示click事件的isTrusted成员的原因是因为click事件本身包含了很多原型函数,而这些原型函数会被`stringify`隐藏起来。

解决方法是通过在控制台中解包事件的值来查看完整的事件信息。大多数浏览器(IE7及以上版本)都支持在控制台中解包事件的值。你可以在这里查看一个例子:[http://jsfiddle.net/djf2nxwd/14/](http://jsfiddle.net/djf2nxwd/14/)

以下是一个示例代码,展示了如何在控制台中打印完整的事件信息:

document.getElementById('foo').onclick = (event) => {
    console.log(JSON.stringify(event));
    console.log(event);
};

这样做可以得到你期望的行为。

0