Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Firefox Console hiding output Date: Sun, 29 Jun 2014 18:07:32 +0200 Organization: PointedEars Software (PES) Lines: 102 Message-ID: <4789891.7DGo7xDoAS@PointedEars.de> References: <8697251.f0ROh21TMe@PointedEars.de> <1npy1jfahydbo.1d2d5ent1x4x1$.dlg@40tude.net> Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1404058061 1118 eJwFwYEBwCAIA7CXZNCi5yDS/09YAqexMwgGBPHNnNSy7dW3N0adPqvUsHln3yXWCGE894sfOt4R/Q== (29 Jun 2014 16:07:41 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Sun, 29 Jun 2014 16:07:41 +0000 (UTC) User-Agent: KNode/4.12.4 X-User-ID: eJwFwQkBACAIBLBKfAcYBxH6R3CDOnuHOdyw2K1BjApL12nEjWCBjvXrrLzeKqsECknJpHjmxW11eTB0PlJmFSo= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg== X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. On Sun, 29 Jun 2014 10:59:33 +0200, Thomas 'PointedEars' Lahn wrote: >> JJ wrote: >>> On 29 Jun 2014 00:47:16 GMT, Stefan Ram wrote: >>>> JJ writes: >>>>> Did that happen on all web pages, including blank HTML file? >>>> >>>> I only ever tried it in the debugger with no web page at all: >>>> >>>> JSON.stringify( document ) >>>> "{"location":{}}" >>>> >>>> . >>> >>> There are log limits enforced. >> Yes, but that is not the reason for the above result. > > You're right. That's just to show that there's no document loaded when he > tested the code. I see, but that is not a viable proof either. I get the same with a document loaded because that is how JSON.stringify() works. See below. >> This is: >> >> Object.getOwnPropertyNames(document).filter(function (name) { return >> Object.getOwnPropertyDescriptor(document, name).enumerable; }) >>| < Array [ "location" ] >> >> And in Chromium: >> >> JSON.stringify(document) >>| TypeError: Converting circular structure to JSON >> >> Object.getOwnPropertyNames(document).filter(function (name) { return >> Object.getOwnPropertyDescriptor(document, name).enumerable; }) >>| Array[147] >> >> The structure is “circular” in WebCore because at least “document.body” >> and “document.body.ownerDocument” (=== document) are own, enumerable >> properties. >> >> In general, it is a Bad Idea to subject host objects to JSON >> stringification. > > I just noticed that. Why didn't JSON.stringify generate an exception? | > Object.getOwnPropertyNames(document) | < Array [ "location" ] indicates that the object referred to by “document” in the Gecko DOM does not have own properties except “location”, which is also enumerable (and deprecated in favor of “window.location”). It refers to an object that, as far as Object.getOwnPropertyNames() is applicable to host objects, inherits all of its properties: | > Object.getOwnPropertyNames(document.location) | Array [ ] The next object in its prototype chain is | > Object.getPrototypeOf(document.location) | < XPC_WN_NoMods_NoCall_Proto_JSClass { href: Getter, hash: Getter, host: | Getter, hostname: Getter, pathname: Getter, port: Getter, protocol: | Getter, search: Getter, origin: Getter, reload: reload(), 5 more… } which provides the expected properties. So even though “document” is in that sense “circular” in the Gecko DOM, too, no object in that network of references is visited twice by Mozilla JavaScript’s JSON.stringify(). But the latter is a requirement for throwing a TypeError exception, see ES 5.1, §15.12.3, JO(value), step 1. This is different in the WebCore DOM, even if Google V8 JavaScript that is used by Chromium implements the same algorithm as Mozilla JavaScript that is used by Firefox/Iceweasel. A draft reference implementation of ECMAScript (current target is the 5.1 Edition) in ECMAScript [1] is available on the ES Matrix site with the global “es” property. For example, you can enter try { es.JSON.stringify(document); } catch (e) { e.stack } in the console to see where and why the exception should be thrown. I have also included a call tracer that you can enable with es.enableTrace = true; (assigning the default “false” disables tracing again). It is considered polite to post using one’s real name. ________ [1] -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not Cc: me. / Bitte keine Kopien per E-Mail.