zoukankan      html  css  js  c++  java
  • 属性为何不能delete掉?

    之前看书的时候,看到通过var声明的全局变量不可以通过delete操作符删除。

    然后,why?

    How can I remember that?

    so,I found some words;

    首先,要了解window对象

    window对象是BOM的核心。

    那何为BOM?

       bom,全称浏览器对象模型。他是操纵浏览器对象的,所以它提供了很多对象,用来访问浏览器的功能。查看高级程序设计的目录,BOM的二级目录有下面几个:

      window对象,location对象,navigator对象,screen对象,history对象。

    window对象就是我们的全局作用域,任何在全局作用域声明的变量和函数,都会变成window对象的属性和方法。

      我们平时写的function 声明,也是同样建立window对象下:

      

    var age = 10;
        function sayAge(){
            alert(this.age)
            console.log(this) 
        }
        window.age // 10
        sayAge()   // 10

     使用var 声明的全局变量无法用delete操作符删除。 通过var声明的变量和通过function声明的函数拥有DontDelete特性,无法被删除。

    全局或者函数代码中的变量和函数声明总是创建带有 DontDelete 特性的属性。

      上面这句注意这几点:

    •  在全局作用域或者函数代码通过var或者function声明的,无法用delete删除,也就是带有名为[[Configurable]]的特性。参考高级程序设计P194;
    • 单纯的eval中声明的变量或函数,可以删除
    • 如果是在eval里面的函数中声明的,不可以删除。参考第一条,第一条的优先级最高。

      优先级:全局作用域/函数代码 > eval 。归根结底,就是第一条,在全局作用域或者函数代码中通过var或者function声明的,无法用delete删除。

          


     delete是普通运算符,会返回true或false。

      规则为:当被delete的对象的属性存在并且拥有DontDelete时 返回false,否则返回true。

          if(属性存在 &&  拥有DontDelete)  return true;
      else  return false;

       这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否。

      所以,不要单纯的相信宿主对象对你造作的返回结果。

    摘自:http://bubkoo.com/2014/01/23/deep-in-delete/

    下面是对于 JavaScript 中 delete 操作是如何工作的简短的总结:

    • 变量和函数声明都是活化对象(Activation Object) 或全局对象(Global Object)的属性
    • 属性拥有内部属性,其中 DontDelete 这个内部属性负责确定一个属性是否能够被删除
    • 全局或者函数代码中的变量和函数声明总是创建带有 DontDelete 特性的属性
    • 函数参数总是活动对象的属性, 并且带有 DontDelete
    • 在 Eval 代码中声明的变量和函数总是创建不带 DontDelete 特性 的属性
    • 新的未声明的属性在生成时带空的内部属性,因此也不带 DontDelete 特性
    • 永远不要相信宿主对象对 delete 操作做出的反应
  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/nostic/p/5883774.html
Copyright © 2011-2022 走看看