我正在为此寻找合适的解释,但是找不到回答我的问题的解释。
我在JavaScript中读到,无法删除对象。为了找出答案,我在浏览器的控制台中玩耍。我创建了这样的对象:
var a = {x:10};
然后我做delete a.x
了返回的事情true
。
然后继续删除对象,如下所示:delete a
。
但是让我难过的是Google Chrome
回来的时候false
,Firefox
回来了true
如何在一个浏览器中而不是在另一个浏览器中“删除”对象?我在这里缺少什么吗?还是浏览器实现导致了这一点?
在FF v27中:
在Google Chrome v33中。
这是由于在Firefox和Chrome中运行控制台代码的内部方法不同。
在Firebug中,控制台代码使用for扩展代码形式eval
进行评估。但是,在Chrome中,控制台中的代码是使用内部方法1评估的,内部方法1模拟实际的代码运行,而不是直接使用JavaScripteval
函数。
的[[Configurable]]
内部属性描述符属性确定是否删除该变量的尝试/属性将成功。如果为false,则不会删除该属性,并且delete
运算符将返回false。
评估代码中定义的所有变量都[[Configurable]]
设置为true
。但是,如果您在传递给的代码外部定义了一个变量eval
,则该属性将设置为false
。
eval
ECMAScript标准第10.5节中指定了行为与其他类型的可执行代码之间的行为差异:
2.如果代码是eval代码,则让configurableBindings为true,否则让configurableBindings为false。
1:此代码仅是前端代码,而不是实际的内部代码,它分为许多层次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句