讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript怎样删除对象属性_delete运算符如何使用?

轻静吖_3686

轻静吖_3686

发布时间:2026-01-06 20:22:02

|

384人浏览过

|

来源于php中文网

原创

delete只对对象自有可配置属性有效,不能删除变量、函数声明或不可配置属性;赋值undefined不删除属性,而delete真正移除属性;数组中delete产生空槽,应使用splice等方法。

javascript怎样删除对象属性_delete运算符如何使用?

delete 运算符能删掉对象属性,但不能删变量或函数声明

直接说结论:delete 只对对象的**自有可配置属性**有效。它不是“删除变量”的工具,也不能删 var、let、const 声明的绑定,也不能删函数声明(function foo() {})本身。

常见误解是以为 delete obj.key 类似于 obj.key = undefined —— 实际上二者语义完全不同:delete 真正移除属性(从对象内部属性列表中剔除),而赋值 undefined 只是改值,属性依然存在、仍会被 for...in 遍历到。

  • delete 返回布尔值:true 表示删除成功(或目标本就不存在),false 表示失败(如属性不可配置)
  • 严格模式下,尝试删除不可配置属性会抛出 TypeError;非严格模式下静默失败(返回 false)
  • 全局作用域下用 var 声明的变量,其属性被自动设为不可配置,所以 delete window.xxx 一定失败

哪些属性删不掉?看 [[Configurable]] 特性

对象属性是否可删,取决于它的 [[Configurable]] 内部特性。默认情况下:

Nginx Reverse Proxy
Nginx Reverse Proxy

配置 Nginx 反向代理,实现域名绑定。用户说“绑定域名”“配置 Nginx”“反向代理”时触发,将域名绑定到指定 IP:端口。

下载
  • Object.defineProperty(obj, 'key', { value: 1 }) 创建的属性,configurable 默认为 false → delete 失败
  • obj.key = 1 或 obj['key'] = 1 创建的属性,configurable 默认为 true → delete 成功
  • 访问器属性(get/set)若未显式设 configurable: true,也删不掉
const obj = {};
Object.defineProperty(obj, 'locked', { value: 42 });
console.log(delete obj.locked); // false(不可配置)

obj.normal = 'ok';
console.log(delete obj.normal); // true(可配置)

delete 对数组的影响:不要用来删数组元素

delete arr[2] 不会改变数组长度,也不会移动后续元素,而是把对应位置变成“空槽”(empty),该索引在 for...in 中仍会出现,但 arr[2] 访问返回 undefined,且 Array.isArray(arr) 仍为 true。

立即学习“Java免费学习笔记(深入)”;

  • 这不是你想要的“删除数组元素”行为 —— 应该用 splice()、filter() 或 pop()/shift()
  • delete 后的数组用 forEach、map 会跳过空槽,但 for...in 仍会遍历到那个索引
  • 性能上,delete 会让 V8 引擎将数组退化为“字典模式”,后续操作变慢
const arr = ['a', 'b', 'c', 'd'];
delete arr[2];
console.log(arr);        // ['a', 'b', <empty>, 'd']
console.log(arr.length); // 4(没变!)
console.log('2' in arr); // false(但注意:这和 hasOwnProperty 不同)

替代方案:Reflect.deleteProperty 更可控

Reflect.deleteProperty(obj, key) 是 delete 的函数式封装,行为完全一致,但它更适合作为高阶操作使用(比如配合 Proxy 或统一错误处理)。它不会在严格模式下抛异常,而是始终返回布尔值,便于逻辑判断。

  • 和 delete 一样,只影响自有可配置属性
  • 不触发语法错误,适合动态键名场景(Reflect.deleteProperty(obj, someKey) 比 delete obj[someKey] 在某些静态检查工具中更友好)
  • 无法绕过不可配置限制 —— 它只是把 delete 操作“函数化”,不是增强版
const obj = { a: 1, b: 2 };
const key = 'a';
console.log(Reflect.deleteProperty(obj, key)); // true
console.log(obj); // { b: 2 }
真正容易被忽略的是:很多开发者在循环中边遍历边 delete 对象属性,却没意识到这不会影响当前遍历顺序(因为 for...in 遍历的是属性快照,不是实时结构),也不影响 Object.keys() 的结果(它只返回可枚举自有属性,且生成时已确定)。要安全地批量删属性,先收集键名再统一删,比边遍历边删更可靠。

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6324

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3384

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1892

2025.10.17

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

818

2025.12.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2398

2023.09.20

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

710

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

343

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

553

2025.11.17

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn