• 关于JavaScript中的delete操作


    关于JavaScript中的delete操作

    看到一道题,是这样的:

    (function(x){
      delete x;
      return x;
    })(1);
    
    • 1

    • null

    • undefined

    • Error
      我选了Error、、、、,然而是错的,运行了一下,答案是1.
      难道不能delete函数中的参数吗?什么情况是可以delete的?什么情况是不可以delete的?
      去网上查了一下
      通常:delete 操作符用来删除一个对象的属性。
      语法:delete expression
      如果成功返回true,失败返回false,但是在严格模式中,如果该属性是一个不可配置的的,delete会抛出异常。
      如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失。

    "use strict"
    var obj={
        name:"aa"
    }
    Object.defineProperty(obj, "name", {
        
        writable: true,
        enumerable: true,
        configurable: false
    });
    delete obj.name;
    console.log(obj.name);
    

    obj.name设置为不可配置后delete,在严格模式下会抛出如下异常
    Uncaught TypeError: Cannot delete property 'name' of #<Object>
    delete 操作符还可以用来删除隐式声明的全局变量,就是没有用var声明的全局变量

    实验时遇到一个问题

        var name="aa";
         delete name; 
    console.log(name);
    

        var name1="aa";
         delete name1; 
    console.log(name1);
    

    运行时不一样的,在第一个例子中,会报错。因为name是内置的属性、、、
    enter description here

    还有被标记了DontDelete的一些对象的属性不能被delete.

    /*  foo是被正常声明的,所以带有DontDelete标记,从而不能被删除! */  
    
    var foo = 1;  
    delete foo; // false     
    console.log(typeof foo); // "number" 
    /* bar是作为函数被声明,一样带有DontDelete,不能被删除。 */  
    
    function bar(){}  
    delete bar; // false   
    console.log(typeof bar);// "function" 
    
    /*函数中var的变量,一样带有DontDelete,不能被删除。*/
    function f() {
     var z = 44;
     delete z;     // returns false
     console.log(z);//44
    }
    

    需要注意的是一些内建的对象是自动持有这个标记的,从而不能被删除,比如函数内的arguments,以及函数的 length属性,以及传入的参数
    如果变量被delete了,再对它取值会报错,index.html:11 Uncaught ReferenceError: x is not defined,x(某变量)找不到了。

  • 相关阅读:
    yum安装工具的理解
    Linux防火墙
    Python的优雅写法
    Python的time模块
    Python中根据提供的日期,返回是一年中的第几天
    观察者模式
    数据插入INSERT
    RSA加密、解密、签名、校验签名
    js的apply和call
    js插件编程-tab框
  • 原文地址:https://www.cnblogs.com/bluey/p/5394986.html
Copyright © 2020-2023  润新知