Javascript stringify生成空对象{}
我试图从GoogleChrome(WebRTC框架)获取事件对象的值。我的方法如下所示:Javascript stringify生成空对象{},javascript,json,object,webrtc,Javascript,Json,Object,Webrtc,我试图从GoogleChrome(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 =
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]] );
for(var i=0;i事件很可能没有WebIDL JSON序列化程序。
如果您只对onicecandidate感兴趣,那么应该在event.candidate上调用JSON.stringify(它可能不存在以表示候选项的结束)--另请参见中的示例,这是为了检查?如果是这样,您可能希望使用console.dir
(不使用字符串串联)Stringify将只到达拥有的、可枚举的属性,而不是console.log
,因此任何对象的任何不符合该条件的属性都不会被处理。您写道,每个循环都有工作。我想您实际上是指for in
循环工作,而for
循环不工作。这是因为event
没有.length
,其属性不是数字索引。in
循环的是一个通用属性枚举器,它访问所有可枚举属性,包括继承的属性。那么如何使用hasNext(),因为我不能使用if(Ifor
循环。您仍然需要递归处理嵌套对象,但这并不复杂。