JavaScript删除对象属性的三种方式:delete、undefined赋值与数组处理
本文详解JavaScript中删除对象属性的三种方法。重点分析delete操作符的行为及其局限性,包括对原型链、var/let/const声明及不可配置属性的影响。对比使用undefined赋值的性能优势,并阐述在数组中使用delete产生空洞的问题及splice的正确用法。
1、delete
delete是移除对象属性且不留残余的唯一正确方式,但其执行速度比将 object[key] 设置为 undefined 的替代方案慢100倍
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
delete myObject.regex;
console.log(myObject);
delete 操作符用于从对象中移除指定属性。若成功删除则返回 true,否则返回 false。需特别注意以下情形:
若尝试删除不存在的属性,delete 不会执行任何操作,但仍会返回 true
若对象原型链上存在同名属性,删除后对象将引用原型链上的该属性(即 delete 仅对自身属性生效)
通过 var 声明的属性无法从全局作用域或函数作用域中移除。
因此,delete 操作无法删除全局作用域内的函数(无论是函数声明还是函数表达式)。
除全局作用域中的函数不可删除外,对象(object)内部的函数可以使用 delete 操作符删除。
通过 let 或 const 声明的属性无法从其声明的作用域中移除。
不可配置的(Non-configurable)属性无法被移除。这包括 Math、Array、Object 等内置对象的属性,以及通过 Object.defineProperty() 方法设置为不可配置的属性。
2、 obj.field = undefined;
此方法并非解决该问题的标准答案!但若谨慎使用,可显著提升部分算法的性能。若在循环中使用 delete 且遇到性能瓶颈,请参阅详细解释。
var obj = {
field: 1
};
obj.field = undefined;
3、数组中使用delete
在数组中,与普通对象不同,使用 delete 会留下垃圾数据,即在数组中形成“洞”并插入 null,且 length 属性保持不变。
var array = [1, 2, 3, 4];
delete array[2];
/* Expected result --> [1, 2, 4]
* Actual result --> [1, 2, null, 4]
*/
4、数组中使用splice
arrayObject.splice(index,howmany,item1,.....,itemX)
index: 必需。整数,指定添加/删除项目的位置,支持负数从数组尾部开始计数
尾处规定位置。
howmany: 必需。要删除的项目数量。若设置为 0,则不删除任何项目。
item1: 可选。向数组添加的新项目。
var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"
document.write(arr + "<br />")
arr.splice(2,0,"William")
document.write(arr + "<br />")
/*
*George,John,Thomas,James,Adrew,Martin
*George,John,William,Thomas,James,Adrew,Martin
*/
总结
到此这篇关于JavaScript如何删除对象的某个属性的文章就介绍到这了,更多相关JavaScript删除对象某个属性内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
