| 在javascript中,我们有时候要使用delete删除对象。但是,对于delete的一些细节我们未必尽知。昨天,看到kangax分析delete的文章,获益匪浅。本文将文章的精华部分翻译出来,与各位分享。 
    原理
    
        代码类型 执行上下文 激活对象/可变对象 属性特性 内置对象和DontDelete 未声明的赋值 Firebug 困惑
    
        通过eval删除变量 浏览器兼容性
    
        Gecko DontDelete bug IE bugs 误区 ‘delete’和宿主对象 ES5严格模式 总结  原理 为什么我们能删除一个对象的属性? varo = { x: 1 }; 
deleteo.x; // true 
o.x; // undefined
 但是,像这样声明的变量则不行:
 varx = 1; 
deletex; // false 
x; // 1
 或者如此声明的函数:
 functionx(){} 
deletex; // false 
typeofx; // "function"
 注意,当一个属性不能被删除时,delete只返回false。
 要理解这一点,我们首先需要掌握像变量实例化和属性特性这样的概念--遗憾的是这些在关于javascript的书中很少讲到。我将在接下来的几个段落中试着简明的重温这些概念。 理解它们一点也不难,如果你不在乎它们为什么这么运行,你可以随意的跳过这一章。 代码类型 在ECMAScript中有三种类型的可执行代码:全局代码(Global code)、函数代码(Function code)和Eval code。这些类型有那么点自我描述,但这里还是作一个简短的概述: 
    当一段源代码正文被视为程序时,它在全局作用域中执行,被当成全局代码(Global code)。在一个浏览器环境中,SCRIPT元素中的内容通常被当作程序来解析,因此,它被当作全局代码来评估。 在一个函数内部直接执行的任何代码,很明显被当作函数代码(Function code)。在浏览器红中事件属性的内容(如:<p onclick="...">)通常被当作函数代码(Function code)来解析;最后,提供给内置函数eval()的文本被当作Eval 代码(Eval code)来解析。我们很快会看到这种类型很特殊。                        (编辑:沈阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |