js删除对象属性

简介: 本文介绍了JavaScript中删除对象属性及数组元素的多种方法,包括设置属性为undefined、使用delete操作符、对象解构、Reflect.deleteProperty方法以及数组的delete和splice操作。每种方法均有示例代码及关键特性说明,适用于不同场景下的属性或元素删除需求,帮助开发者更高效地处理对象和数组的操作。

1.将属性设置为 undefined

属性本身仍将存在于对象中,它还会改变原始对象。

css

体验AI代码助手

代码解读

复制代码

const pet = { 
  species: 'dog', 
  age: 3, 
  name: 'celeste', 
  gender: 'female' }; 
 pet.gender = undefined; Object.keys(pet); // ['species', 'age', 'name', 'gender'] 123456789

2.使用 delete 操作符

delete 将完全从对象中删除属性,会导致原始对象的发生改变,但速度很慢。

css

体验AI代码助手

代码解读

复制代码

const pet = { 
  species: 'dog', 
  age: 3, 
  name: 'celeste', 
  gender: 'female' }; 
 delete pet.gender; Object.keys(pet); // ['species', 'age', 'name'] 123456789
  • delete操作符移除对象指定属性,删除成功返回true,否则返回false。
  • 删除的属性不存在,delete不会起任何作用 ,但是仍会返回true。
  • 如果原型链有同名属性,只会删除自身的属性。
  • delete不能删除全局作用域函数以及作用域中用let或const声明的属性。
  • delete可以删除对象的函数。
  • 不可设置属性不能被删除。比如Math、Array、Object内置对象属性以及使用Object.defineProperty()方法设置的属性。

3.使用对象解构

通过用展开运算符(…)可以将需要省略特定属性的对象解构到新对象。这个技巧在需要删除多个属性时特别有用,并且不会更改原始对象。

css

体验AI代码助手

代码解读

复制代码

const pet = { 
  species: 'dog', 
  age: 3, 
  name: 'celeste', 
  gender: 'female' }; 
 const { gender, ...newPet } = pet; Object.keys(pet); // ['species', 'age', 'name', 'gender'] Object.keys(newPet); // ['species', 'age', 'name'] 12345678910

4.使用Reflect

ES6新增的方法,Reflect.deleteProperty(对象,属性名),返回一个布尔值。

css

体验AI代码助手

代码解读

复制代码

const pet = { 
  species: 'dog', 
  age: 3, 
  name: 'celeste', 
  gender: 'female' }; 
 Reflect.deleteProperty(pet, 'gender')Object.keys(pet); // ['species', 'age', 'name'] 123456789

5.删除数组元素

  • delete

ini

体验AI代码助手

代码解读

复制代码

delete arr[0];1

删除后数组长度不变,原索引下元素变为null。

  • splice

会改变原数组。


转载来源:https://juejin.cn/post/7275576074591141940

相关文章
|
7月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
511 0
|
负载均衡 Ubuntu 应用服务中间件
|
8月前
|
监控 前端开发 Java
Spring拦截链的实现原理是什么?
拦截器是Spring MVC中处理请求的重要机制,通过拦截链可在请求的不同阶段插入自定义逻辑。本文详解拦截链的实现原理、核心组件如HandlerMapping、HandlerAdapter、DispatcherServlet和HandlerInterceptor的作用,以及拦截器在请求处理中的工作流程。了解这些内容有助于开发者更好地掌握Spring MVC的请求处理机制,并灵活应用于权限验证、日志记录等场景。
127 1
|
9月前
|
人工智能 安全 JavaScript
Java ArrayList:动态数组
本文探讨Java中的数组,对比C/C++、JS/PHP/Python等语言的数组特性。文章分析了Java数组的定义、创建方式及其规范,指出其优缺点。Java数组作为引用类型,在堆上分配内存,支持动态大小,避免了C/C++中裸数组的常见问题(如越界访问)。然而,Java数组也存在性能瓶颈和设计缺陷,例如运行时的安全检查影响速度,无法创建超大数组或泛型数组,且多线程场景下缺乏同步机制。作者建议在实际开发中用集合替代数组以规避这些问题。
213 1
|
9月前
|
人工智能 运维 Java
SpringBoot+MySQL实现动态定时任务
这是一个基于Spring Boot的动态定时任务Demo,利用spring-context模块实现任务调度功能。服务启动时会扫描数据库中的任务表,将任务添加到调度器中,并通过固定频率运行的ScheduleUpdater任务动态更新任务状态和Cron表达式。核心功能包括任务的新增、删除与Cron调整,支持通过ScheduledFuture对象控制任务执行。项目依赖Spring Boot 2.2.10.RELEASE,使用MySQL存储任务信息,包含任务基类ITask及具体实现(如FooTask),便于用户扩展运维界面以增强灵活性。
328 10
|
6月前
|
人工智能 JavaScript 前端开发
理解 JavaScript 中的节流和防抖:实现 `throttle` 和 `debounce` 函数
节流(throttle)是指在一定时间间隔内只执行一次函数,常用于控制高频事件触发频率,如滚动、窗口调整等。本文介绍其实现原理与代码示例。
235 0
|
7月前
|
人工智能 安全 Go
go快速上手:golang中的反射
本文深入解析Go语言反射机制,涵盖reflect包的核心类型与操作方法,通过实例演示如何动态获取类型信息、修改值及调用方法,并探讨反射的高级用法与注意事项,帮助开发者合理高效地使用反射。
338 1
|
9月前
|
Python
Python 中__new__方法详解及使用
__new__ 是 Python 中用于创建类实例的静态方法,在实例化对象时优先于 __init__ 执行。它定义在基础类 object 中,需传递 cls 参数(表示当前类)。__new__ 可决定是否使用 __init__ 方法或返回其他对象作为实例。特性包括:1) 在实例化前调用;2) 始终为静态方法。示例中展示了其用法及 Python2 和 Python3 的差异,强调了参数处理的不同。
416 10
|
11月前
|
SQL 算法 搜索推荐
mysql 之order by工作流程
本文深入解析了MySQL中`ORDER BY`的排序机制,通过具体示例展示了排序过程及性能优化方法。文章首先分析了基于内存和磁盘的排序方式,包括`sort_buffer_size`的影响以及临时文件的使用场景。接着介绍了`rowid`排序算法,该算法通过减少参与排序的数据量来提升性能,并对比了其与传统排序的区别。此外,还探讨了随机查询`ORDER BY RAND()`的执行流程及其优化策略。最后提到了MySQL 5.6引入的优先队列排序算法,适用于仅需部分有序结果的场景。文章结合`optimizer_trace`工具详细说明了各配置参数对排序行为的影响,为优化查询提供了实用指导。
167 1
mysql 之order by工作流程