San*_*yak 5 javascript firefox garbage-collection google-chrome
我在SO上寻找一个合适的解释,但找不到回答我问题的那个.
我在JavaScript中读到,无法删除对象.所以要发现,我正在浏览器的控制台中玩游戏.我创建了一个这样的对象:
var a = {x:10};
Run Code Online (Sandbox Code Playgroud)
然后我做delete a.x
了返回true
.(这里没有惊喜)
然后继续删除这样的对象:delete a
.
但是,什么难倒我了,而Google Chrome
返回false
,Firefox
返回true
如何在一个浏览器中"删除"一个对象而不在另一个浏览器中"删除"?我在这里缺少什么或浏览器实现是否会导致这种情况?
在FF v27中:
在Google Chrome v33中
.
这是由于 Firefox 和 Chrome 中运行控制台代码的内部方法存在差异。
在 Firebug 中,控制台代码使用for 扩展代码的形式eval
进行评估。然而,在 Chrome 中,控制台中的代码是使用模拟实际代码运行的内部方法1进行评估的,而不是直接使用 JavaScript 的eval
函数。
内部[[Configurable]]
属性描述符属性确定删除变量/属性的尝试是否会成功。如果为 false,则不会删除该属性,并且delete
运算符将返回 false。
eval 代码中定义的所有变量均已[[Configurable]]
设置为true
. 但是,如果您在传递给 的代码外部定义变量eval
,则该属性将设置为false
。
eval
ECMAScript 标准第 10.5 节规定了与其他类型的可执行代码之间的行为差异:
2. 如果代码是 eval 代码,则令configurableBindings为true,否则令configurableBindings为false。
1:这段代码只是前端代码,而不是实际的内部代码,它有很多层次。
归档时间: |
|
查看次数: |
428 次 |
最近记录: |