本文只是简单介绍了有关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