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更深的问题和兼容性问题,可以参考

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaScriptdelete关键字用于删除对象的属性或数组的元素。然而,delete关键字不能用于删除数组本身。引用提到,delete关键字返回一个布尔值,如果删除成功则返回true,否则返回false。如果试图删除不存在的变量,delete操作不会产生任何效果,但会返回true。在对象使用delete关键字可以删除对象自己的属性,但不能删除原型链上的属性。引用给出了一个例子,其delete a.name成功删除了对象a的name属性,而delete a.height则成功删除了对象a的原型链上的height属性。在块级作用域使用delete关键字也是无效的,如引用所示,delete a会返回false且不会删除变量a。同样地,内置对象的属性也不能被删除,如引用的例子所示,delete Math.E会返回false。然而,内置对象的方法可以被成功删除,如delete Math.abs会返回true。总之,delete关键字在JavaScript用于删除对象的属性或数组的元素,但不能删除数组本身,且不能在块级作用域使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [jsdelete详解](https://blog.csdn.net/liangtaox8/article/details/99830799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [jsdelete操作符不能删除的情况(学习记录)](https://blog.csdn.net/jq233/article/details/105618703)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值