Ran*_*lue 10 javascript google-chrome
根据此MDN页面,delete关键字
仅当属性存在且无法删除时才返回false.它在所有其他情况下返回true.
但是,我看到了delete返回的情况true,尽管没有删除属性:
delete Window
delete alert
delete dir
delete console
delete 2
delete null
delete {}.x
...
Run Code Online (Sandbox Code Playgroud)
实际上,几乎所有window返回的属性都是真的delete,可以通过运行以下脚本看到about:blank:
for(a in window) { if(delete window[a]) { console.log(a); } }
Run Code Online (Sandbox Code Playgroud)
但是,大多数属性window实际上都不会被删除.返回值的真正含义是delete什么?为什么它会返回true它不删除的属性?
(注意:我有兴趣参考Chromium代码来解释行为delete.)
该窗口是一个主机对象,其语义由主机环境定义,例如浏览器. delete应用于宿主对象的属性时比应用于本机对象时更复杂.
主机对象可以使用任何依赖于实现的行为来支持这些内部属性,只要它与本文档中声明的特定主机对象限制一致即可.
If IsUnresolvableReference(ref) then,
If IsStrictReference(ref) is true, throw a SyntaxError exception.
Else, return true.
Run Code Online (Sandbox Code Playgroud)
所以当主机对象不支持删除或修改属性时,它会返回一个不可解析的引用或假装被删除的引用.这两种方法都会导致true以非严格模式返回.
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |