Javascript 什么';Firefox上的document.domConfig怎么样?

Javascript 什么';Firefox上的document.domConfig怎么样?,javascript,firefox,exception,dom,Javascript,Firefox,Exception,Dom,当我在Firefox中遇到一个有趣的现象时,我正在迭代document的属性,document声称支持属性domConfig,但是当我尝试检索属性时,我得到一个异常: 错误:未捕获异常:[异常…”组件返回故障代码:0x80004001(NS_错误未实现)[nsIDOM3Document.domConfig]“nsresult:“0x80004001(NS_错误未实现)”位置:“JS frame::javascript:alert(typeof(document.domConfig))::第1行“

当我在Firefox中遇到一个有趣的现象时,我正在迭代
document
的属性,
document
声称支持属性
domConfig
,但是当我尝试检索属性时,我得到一个异常:

错误:未捕获异常:[异常…”组件返回故障代码:0x80004001(NS_错误未实现)[nsIDOM3Document.domConfig]“nsresult:“0x80004001(NS_错误未实现)”位置:“JS frame::javascript:alert(typeof(document.domConfig))::第1行“数据:否]

下面显示了这一行为,Chrome和IE都一致(我没有检查Opera)说
domConfig
不是window的属性,但Firefox声称是,但无法检索它(复制粘贴到URL字段,因为我无法获得标记以提供链接)


这是怎么回事?

Pointy是对的,
domConfig
是在一个接口中公开的(DOM级别3核心-在Mozilla的源代码中被调用),但是它是(请参见
nsDocument::GetDomConfig()
typeof
的工作原理是首先获取值,然后确定其类型(而不是从接口定义),因此
typeof document.domConfig
抛出异常也就不足为奇了

至于为什么会这样做,政府对此没有任何讨论,所以我们只能猜测

我的猜测是,对于Mozilla打算实现的规范来说,最终确定接口(用Mozilla的话说是“冻结”)是有意义的,这样,在接口的新属性/方法实现后,它们就可以从二进制代码中使用,而无需进一步修改。不管怎样,这似乎都不重要


如果您有兴趣听取开发人员的意见,您可以在或mozilla.dev.platform中询问。

对我来说似乎很清楚:文档中说它没有实现,当您尝试访问它时,肯定会出现“未实现”异常。像“文档”这样的“原生”对象是门户的浏览器,因此C++对象将属性暴露给JavaScript,这会触发异常,这意味着它只作为存根存在。这是怎么给你带来问题的?@Pointy,那么为什么它看起来像一个属性?在迭代属性时,我不得不跳过它。我想这似乎是因为Mozilla开发人员将它暴露在外。我不太清楚JavaScript C++边界是如何工作的,但我猜想有一个函数被调用,它抛出了NoTube实现的异常。你可以将你的“属性嗅探器”包装在一个try/catch块中,然后忽略这样的异常。当试图获取其类型时抛出异常时,为什么要对其进行迭代?听起来很愚蠢。它迫使开发人员为未知类型的异常做好准备,并悄悄地删除它们——这根本不是一个好的做法执行。见Nickolay的答案。
/* true in FF, false in other browsers */ 
javascript:alert("domConfig" in document)
/* exception in FF, 'undefined' in other browsers */
javascript:alert(typeof(document.domConfig))