关于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(某变量)找不到了。

原文地址:https://www.cnblogs.com/bluey/p/5394986.html