JSON.stringify 产生空对象 {}

JSON.stringify produces empty object {}

我尝试从 Google Chrome(WebRTC 框架)获取事件对象的值。我的方法如下所示:

yourConnection.onicecandidate = function (event) {
    console.log("onicecandidate called on my side with event: "
        + JSON.stringify(event, null, 4)); //that last line produces {}

    var result = "";
    for (var key in event) {
        result += (key + " : " + event[key]);
    }
    console.log(result);
    //...
}

虽然 JSON.stringify 不起作用,但循环产生的结果类似于 ...

  candidate : [object RTCIceCandidate], NONE : 0, CAPTURING_PHASE : 1, AT_TARGET : 2, BUBBLING_PHASE : 3, MOUSEDOWN : 1, MOUSEUP : 2, MOUSEOVER : 4, MOUSEOUT : 8, MOUSEMOVE : 16, MOUSEDRAG : 32, CLICK : 64, DBLCLICK : 128, KEYDOWN : 256, KEYUP : 512, KEYPRESS : 1024, DRAGDROP : 2048, FOCUS : 4096, BLUR : 8192, SELECT : 16384, CHANGE : 32768, type : icecandidate, target : [object RTCPeerConnection], currentTarget : [object RTCPeerConnection], eventPhase : 2, bubbles : false, cancelable : false, defaultPrevented : false, timeStamp : 246.52, path : , srcElement : [object RTCPeerConnection], returnValue : true, cancelBubble : false, stopPropagation : function stopPropagation() { [native code] }, stopImmediatePropagation : function stopImmediatePropagation() { [native code] }, preventDefault : function preventDefault() { [native code] }, initEvent : function initEvent() { [native code] }, composed : false, composedPath : function composedPath() { [native code] }, 

我真的不想让事情变得复杂并使用递归来获取属性的子属性。那么有没有办法以一种漂亮干净的方式输出对象的属性呢?为什么 JSON.stringify 给我一个空对象?

此外,为什么我只能使用 for each 循环遍历一个对象,而

 for (var i = 0; i<event.length; i++) result += (event[i] + event[event[i]] );

不迭代?我是 Javascript 的新手,如有遗漏请见谅。

该事件很可能没有 WebIDL JSON 序列化程序。 如果您只对 onicecandidate 感兴趣,您应该在 event.candidate 上调用 JSON.stringify(它可能不存在以表示候选人结束)——另请参阅 webrtc specification