2016-12-04 49 views
0

我尝试从Google Chrome(WebRTC框架)获取事件对象的值。我的方法是这样的:JSON.stringify生成空对象{}

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 (var i = 0; i<event.length; i++) result += (event[i] + event[event[i]]); 

不重复?我是Javascript新手,很遗憾,如果我失去了一些东西。

+2

中的示例这是为了检查?如果是这样,也许你想使用'console.dir'(没有字符串连接)而不是'console.log'? – 2016-12-04 16:04:15

+2

Stringify仅会覆盖拥有的可枚举属性,因此不会处理任何不符合该条件的对象的任何属性。并且你写道'for each'循环有效。我假设你实际上是指'for-in'循环的工作,而'for'不是。这是因为'event'没有'.length',它的属性不是数字索引。 “for-in”循环是一个普通的属性枚举器,它访问所有可枚举的属性,包括继承的属性。 – 2016-12-04 16:08:12

+0

那么我如何使用hasNext()的方法,因为我不能在for-in循环中使用if(i Phil

回答

0

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