delete 操作符的总结

234 阅读2分钟

本文只是简单介绍了有关delete的一些使用情况,适用于前端初学者。如果需要了解更多原理可以参考其他文章 深入理解delete

delete 操作符用于删除对象的某个属性,返回一个布尔值

接下来我们来看具体实例吧

1. 隐式声明的属性可以被删除,window上部分属性也可以被删除

删除不存在的属性返回值也是 true

x = 150;
delete x; // true

function f() {
    obj = {
        a : 2
    }
}
delete obj; // true

window.ccc=1
console.log(delete ccc)//true

2.使用显示声明的变量,都不能删除,下面打印的都是false。

不能删除具有DontDelete特性的元素, 例如显示声明的变量,函数名声明的函数,对象的内置参数,函数的参数(arguments)等;  

  var height='dog'
  console.log(delete height)

  let age=1;
  console.log(delete age)
  
  function fun(){}
  console.log(delete fun)
  
  const con=3;
  console.log(delete con)
  
  class A{}
  console.log(delete A)		

这里说明一点 如果使用var name='dog' console.log(delete name)那么这个打印是true 原因是因为在全局使用var 声明的变量会挂载到window上 但是那么是window自带的属性,当你使用var 声明的时候相对于将window上的name属性覆盖了  所以删除的name是window上的。

   Person.prototype.age = 20;
   let person = new Person()
   person.age = 18;
   console.log(person.age)//18
   console.log(delete person.age)//true
   console.log(person.age)//20
   console.log(delete Person.prototype.age)
   console.log(person.age)//undefined
   
   console.log(delete person.__proto__)//true
   console.log(delete Person.prototype)//false

不能删除函数的原型对象 prototype是函数的内置属性

3.可以删除数组的元素

   let arr=[2,3,4]
   console.log(delete arr[2]);
   console.log(arr)// [2, 3, empty]

删除数组中元素,数组长度不会发生变化,但是元素实际不存在数组中了。

4.可以删除对象的属性

   let obj={
    name:'hh'
   }
   console.log(delete obj.name)//true
   console.log(delete obj)//false

5.删除字符串

   let str='liiao';
   let string=new String('hhai')
   console.log(delete string)//false
   console.log(delete string[1])//false
   console.log(delete str[0])//false