JS中的delete

delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
语法:
delete expression
expression 的计算结果应该是某个属性的引用,例如:

delete object.property
delete object[‘property’]

js delete 用法(删除对象属性及变量)
1,对象属性删除
function fun(){

this.name = ‘mm’;

}

var obj = new fun();

console.log(obj.name);//mm

delete obj.name;

console.log(obj.name); //undefined

2,变量删除
var name = ‘lily’;
delete name;
console.log(name); //lily
直接用delelte删除不了变量

3,删除不了原型链中的变量
fun.prototype.age = 18;
delete obj.age;
console.log(obj.age) //18

delete删除的是构造函数中的属性,不能删除原型对象中的属性
function Foo(){}
Foo.prototype.bar = 42;
var foo = new Foo();
delete foo.bar;
alert(foo.bar); // 42
delete Foo.prototype.bar; // delete it from the prototype Object
alert(foo.bar); // undefined

=====================
JS中的delete操作符
首先,delete删除成功返回true,失败返回false。

js代码:
function wxCount (KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.init(element);
}

wxCount.prototype = {
init : function(){…}, //初始化方法
count : function(){…}, //计算方法
destroy : function(){
delete this;
} //删除方法
}
仔细一看便知,这里的this指向的是function wxCount(),而在javascript中,delete是无法删除一般的变量或者function的,永远都会返回false。

example:

大多数情况下可以理解为:通过变量或者函数声明的属性不能删除。

1.全局属性可以删除
x = 150;
delete x; //return true

function f() {
obj = {
a : 2
}
}
delete obj; //return true
x可以理解为全局对象GLOBAL的一个属性,即GLOBAL.x,可以删除成功。函数中的obj也被置为全局属性,同理。

2.通过var或者function声明的属性不能删除
var x = 150;
delete x; //return fale
function y() {}
delete y; //return false
3.内置的属性不能删除
delete Math.PI //reuturn false
function (param) {
delete param; //return false
console.log(param); //1
}(1);
4.原型上的属性
function People(){}
People.prototype.age = 18;
var Perez = new People();
Perez.age = 100;
console.log(Perez.age); //100
delete Perez.age; //return ture
console.log(Perez.age); //18
//返回成功但是并没有什么用,Perez还是会继承原型上的age属性

delete People.prototype.age;
console.log(Perez.age); //undefined
5.删除数组中元素
var ipr = [“zhong”,“du”,“sun”,“an”,“yuan”];
delete ipr[4]; //return true
console.log(ipr); //[“zhong”,“du”,“sun”,“an”]
console.log(ipr.length); //5
console.log(4 in ipr); //false
console.log(ipr[4]); //undefined
删除数组中元素,数组长度不会发生变化,但是元素实际不存在数组中了。

var ipr = [“zhong”,“du”,“sun”,“an”,undefined];
console.log(4 in ipr); //ture
如果将最后个元素置为undefined,实际还是存在数组中。

关于delete更深的问题和兼容性问题,可以参考

你可能感兴趣的:(大前端,javascript,es6)