js delete 用法(删除对象属性及变量)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
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. 在JavaScript中,`delete`运算符主要用于删除对象的属性,而不是变量。让我们深入探讨`delete`的用法、限制以及其在不同情况下的行为。 ### 1. 删除对象属性 `delete`运算符用于从对象中删除一个属性。在示例1中: ```javascript function fun() { this.name = 'mm'; } var obj = new fun(); console.log(obj.name); // 输出 "mm" delete obj.name; console.log(obj.name); // 输出 "undefined" ``` 这里,`delete`成功地从`obj`对象中移除了`name`属性。之后尝试访问`obj.name`时,属性不再存在,因此返回`undefined`。 ### 2. 删除变量 需要注意的是,`delete`不能用于删除变量。在示例2中: ```javascript var name = 'lily'; delete name; console.log(name); // 输出 "lily" ``` 尽管使用了`delete`,但`name`变量依然存在,因为全局变量或函数作用域内的变量一旦创建,就不能被删除。`delete`在这里没有起到任何效果,`name`的值仍然是`'lily'`。 ### 3. 删除原型链中的属性 在JavaScript中,对象可以通过原型链继承属性。当尝试删除对象实例上不存在的属性,`delete`会查找原型链。然而,它无法删除存在于原型对象中的属性。例如: ```javascript fun.prototype.age = 18; delete obj.age; console.log(obj.age); // 输出 "18" ``` 在这个例子中,`age`属性是通过原型链从`fun.prototype`继承的。尽管使用了`delete`,但这个属性仍然存在于原型链上,因此删除操作无效,`obj.age`仍能访问到`18`。 ### `delete`的限制与注意事项 - **只适用于可配置(configurable)属性**:要删除一个属性,该属性的`configurable`特性必须为`true`。如果属性不可配置,`delete`将失败,返回`false`。 - **对内置对象和属性的影响**:尝试删除内置对象(如`Array`、`Math`等)或它们的属性通常不会成功,因为这些属性大多不可配置。 - **影响引用计数**:对于那些通过引用计数垃圾回收机制管理内存的语言,`delete`可以减少对象的引用,但这不适用于JavaScript,因为它使用标记清除或V8引擎中的增量标记清除算法。 - **影响`in`运算符和`for...in`循环**:即使属性已被`delete`,`in`运算符可能仍会返回`true`,因为属性可能存在于原型链上。同样,`for...in`循环也会遍历原型链上的属性。 总结来说,`delete`运算符在JavaScript中主要用于删除对象的属性,但不适用于删除变量或原型链中的属性。在处理对象属性时,应谨慎使用`delete`,因为它可能带来预期之外的结果,尤其是在处理不可配置的属性或涉及原型链的继承时。在现代JavaScript编程中,通常更推荐使用`Object.defineProperty()`来控制对象属性的行为,而非直接使用`delete`。
- 粉丝: 6
- 资源: 956
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助