2016-12-04 48 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