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

时间:2016-12-07 14:41:00

标签: javascript json dom-events

HTML:

<button onclick="foo(event);">Test</button>

使用Javascript:

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

控制台结果:

{"isTrusted":true}

Chrome上正在发生这种情况。我还没有测试过其他浏览器。

2 个答案:

答案 0 :(得分:3)

为什么某些属性不包含在JSON.stringify中有很多原因:

  1. 它们可能是function s,无法进行字符串化
  2. 它们可能属于对象的原型(即类),而不是直接属于对象本身。
  3. 如果您需要包含额外数据,最好的办法是手动构建一个包含您想要包含的内容的新对象:

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

答案 1 :(得分:0)

事件本身充满了原型函数 - 它们被stringify隐藏(正如ForbesLindesay已经指出的那样)。

否则,在HTML标记中看到onclick并不常见(因为它会对您的代码产生非常严格的依赖性)。

大多数浏览器(IE7以外)也允许您在控制台内解压缩值 - 您可以在此处看到:http://jsfiddle.net/djf2nxwd/14/

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

这可能是你期望的行为。