Object常用的方法及开发中的使用场景
在前端开发中,Object 对象提供了许多常用的方法,这些方法帮助我们操作对象的属性和结构。以下是常用的 Object 方法及其功能简要说明:
对象常用的方法
1. 创建对象
-
Object.create(proto[, propertiesObject])
创建一个具有指定原型对象和属性的新对象。const proto = { greet: () => "Hello" }; const obj = Object.create(proto); console.log(obj.greet()); // "Hello" -
Object.assign(target, ...sources)
将一个或多个源对象的属性拷贝到目标对象中。const target = { a: 1 }; const source = { b: 2 }; Object.assign(target, source); console.log(target); // { a: 1, b: 2 }
2. 操作属性
-
Object.keys(obj)
返回对象的所有可枚举属性名的数组。const obj = { a: 1, b: 2 }; console.log(Object.keys(obj)); // ["a", "b"] -
Object.values(obj)
返回对象的所有可枚举属性值的数组。const obj = { a: 1, b: 2 }; console.log(Object.values(obj)); // [1, 2] -
Object.entries(obj)
返回对象的键值对数组,每个元素为[key, value]。const obj = { a: 1, b: 2 }; console.log(Object.entries(obj)); // [["a", 1], ["b", 2]] -
Object.fromEntries(entries)
将键值对数组转换为对象。const entries = [["a", 1], ["b", 2]]; const obj = Object.fromEntries(entries); console.log(obj); // { a: 1, b: 2 }
3. 属性描述符
-
Object.defineProperty(obj, prop, descriptor)
为对象添加或修改属性,使用属性描述符来设置配置。const obj = {}; Object.defineProperty(obj, "name", {value: "John",writable: false,configurable: false, }); console.log(obj.name); // "John" obj.name = "Doe"; // 无法修改 -
Object.defineProperties(obj, props)
同时定义多个属性及其描述符。const obj = {}; Object.defineProperties(obj, {name: { value: "John", writable: true },age: { value: 30, writable: false }, }); console.log(obj); // { name: "John", age: 30 } -
Object.getOwnPropertyDescriptor(obj, prop)
获取对象某个属性的描述符。const obj = { a: 1 }; console.log(Object.getOwnPropertyDescriptor(obj, "a")); // { value: 1, writable: true, enumerable: true, configurable: true } -
Object.getOwnPropertyDescriptors(obj)
获取对象所有属性的描述符。const obj = { a: 1, b: 2 }; console.log(Object.getOwnPropertyDescriptors(obj));
4. 检查属性
-
Object.hasOwn(obj, prop)
判断对象是否有指定的自身属性(不包括原型链)。const obj = { a: 1 }; console.log(Object.hasOwn(obj, "a")); // true console.log(Object.hasOwn(obj, "b")); // false -
Object.is(value1, value2)
比较两个值是否严格相等,类似===,但处理NaN和+0/-0更精确。console.log(Object.is(NaN, NaN)); // true console.log(Object.is(0, -0)); // false
5. 冻结、密封和扩展性
-
Object.freeze(obj)
冻结对象,防止修改和扩展。const obj = { a: 1 }; Object.freeze(obj); obj.a = 2; // 不起作用 -
Object.seal(obj)
防止对象新增或删除属性,但允许修改现有属性的值(属性必须是writable的)。const obj = { a: 1 }; Object.seal(obj); obj.b = 2; // 无法添加新属性 obj.a = 2; // 可以修改现有属性 -
Object.isFrozen(obj)
判断对象是否被冻结。const obj = Object.freeze({ a: 1 }); console.log(Object.isFrozen(obj)); // true -
Object.isSealed(obj)
判断对象是否被密封。const obj = Object.seal({ a: 1 }); console.log(Object.isSealed(obj)); // true -
Object.preventExtensions(obj)
阻止对象添加新属性,但允许修改或删除现有属性。const obj = { a: 1 }; Object.preventExtensions(obj); obj.b = 2; // 无法添加新属性 delete obj.a; // 可以删除现有属性 -
Object.isExtensible(obj)
判断对象是否可扩展。const obj = {}; console.log(Object.isExtensible(obj)); // true
6. 原型操作
-
Object.getPrototypeOf(obj)
获取对象的原型。const obj = {}; console.log(Object.getPrototypeOf(obj)); // {} -
Object.setPrototypeOf(obj, prototype)
设置对象的原型。const obj = {}; const proto = { greet: "Hello" }; Object.setPrototypeOf(obj, proto); console.log(obj.greet); // "Hello"
这些方法在操作对象时非常实用,可以帮助你轻松实现对象的创建、遍历、属性管理和扩展控制等功能。
开发中的常见使用场景
以下是 Object 常用方法结合开发中的实际使用场景的说明:
1. 数据拷贝和合并
方法:Object.assign
场景: 在开发中,经常需要合并多个对象的配置,如默认配置与用户自定义配置的合并。
const defaultConfig = { theme: "light", lang: "en" };
const userConfig = { lang: "zh" };
const finalConfig = Object.assign({}, defaultConfig, userConfig);
console.log(finalConfig); // { theme: "light", lang: "zh" }
2. 数据筛选
方法:Object.keys、Object.values、Object.entries
场景: 筛选出对象中符合条件的键或值。例如,筛选出用户信息中有值的字段,用于提交表单。
const formData = { name: "Alice", age: 25, email: "" };
const validFields = Object.entries(formData).filter(([key, value]) => value);
console.log(validFields); // [["name", "Alice"], ["age", 25]]
3. API 数据处理
方法:Object.fromEntries
场景: 后端返回的数组形式数据需要转换为对象形式便于前端使用。
const apiResponse = [["name", "Alice"], ["age", 25]];
const userData = Object.fromEntries(apiResponse);
console.log(userData); // { name: "Alice", age: 25 }
4. 数据校验
方法:Object.hasOwn
场景: 检查对象中是否存在某个属性,避免因访问未定义的属性导致错误。
const user = { name: "Alice", age: 25 };
if (Object.hasOwn(user, "age")) {console.log("Age is available"); // "Age is available"
}
5. 防止数据修改
方法:Object.freeze
场景: 在状态管理(如 Vuex、Redux)中,防止某些对象被意外修改。
const state = Object.freeze({ user: "Alice" });
state.user = "Bob"; // 无效操作,状态无法被修改
6. 限制对象属性
方法:Object.seal
场景: 禁止对象新增或删除属性,但允许修改现有属性值。例如,用于控制特定配置项。
const config = Object.seal({ theme: "dark", lang: "en" });
config.theme = "light"; // 修改成功
delete config.lang; // 无法删除属性
7. 防止扩展对象
方法:Object.preventExtensions
场景: 防止向对象中添加新属性,用于数据结构的保护。
const user = Object.preventExtensions({ name: "Alice" });
user.age = 25; // 无法添加新属性
8. 深入操作属性
方法:Object.defineProperty
场景: 自定义对象的属性行为,例如创建一个只读属性。
const user = {};
Object.defineProperty(user, "name", {value: "Alice",writable: false,configurable: false,
});
user.name = "Bob"; // 修改无效
console.log(user.name); // "Alice"
9. 原型继承
方法:Object.create
场景: 创建带有特定方法或属性的对象,常用于简单的原型继承。
const proto = { greet: () => "Hello" };
const user = Object.create(proto);
console.log(user.greet()); // "Hello"
10. 检查对象扩展性
方法:Object.isExtensible、Object.isSealed、Object.isFrozen
场景: 在严格模式下,检查某对象是否可以修改,用于调试和保护数据完整性。
const config = Object.freeze({ theme: "light" });
console.log(Object.isFrozen(config)); // true
11. 数据格式化
方法:Object.entries
场景: 将对象转为键值对数组,方便用于表格、日志记录等操作。
const user = { name: "Alice", age: 25 };
console.table(Object.entries(user));
// 输出表格形式
12. 比较数据的精确相等性
方法:Object.is
场景: 比较特殊值的相等性(例如 NaN 和 +0/-0),通常在算法验证中使用。
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(0, -0)); // false
总结:
Object 的方法在实际开发中涉及数据拷贝、筛选、转换、防护以及属性控制等核心场景。掌握这些方法不仅能提高代码的可读性,还能有效避免数据操作中的潜在问题。
相关文章:
Object常用的方法及开发中的使用场景
在前端开发中,Object 对象提供了许多常用的方法,这些方法帮助我们操作对象的属性和结构。以下是常用的 Object 方法及其功能简要说明: 对象常用的方法 1. 创建对象 Object.create(proto[, propertiesObject]) 创建一个具有指定原型对象和属性…...
SQL2000在win10上安装的方法
安装前最好先关闭防火墙和一些杀毒软件,因为这些软件在安装过程中可能会碰到注册表等一下杀毒软件比较敏感的地带,如果违反杀毒软件的规则会被当做病毒强行终止删除 首相找到C盘下window文件中的sysWOW64文件 鼠标右键,点击属性、安全、高级 …...
Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 模态对话框 非模态对话框 文件对话框 基本概念 静态函数 常见属性 颜色对话框 基本概念 静态函数 常见属性 字体对话框 基本概念 静态函数 常见属性 输入对话框 基本概念 …...
Java语言的数据结构
Java语言中的数据结构 引言 在计算机科学中,数据结构是指一种特定的方式来组织和存储数据,以便能够高效地进行访问和修改。Java作为一种广泛使用的编程语言,其内置的数据结构和集合框架为程序员提供了便利的工具来管理数据。本文将深入探讨…...
【12】Word:张老师学术论文❗
目录 题目 NO2 NO3 NO4 NO5 NO6 NO7.8 题目 NO2 布局→页面设置→纸张:A4→页边距:上下左右边距→文档网格:只指定行网格→版式:页眉和页脚:页脚距边界:1.4cm居中设置论文页码:插入…...
大疆最新款无人机发布,可照亮百米之外目标
近日,DJI 大疆发布全新小型智能多光旗舰 DJI Matrice 4 系列,包含 Matrice 4T 和 Matrice 4E 两款机型。DJI Matrice 4E 价格为27888 元起,DJI Matrice 4T价格为38888元起。 图片来源:大疆官网 DJI Matrice 4E DJI Matrice 4T D…...
《小迪安全》学习笔记05
目录 读取: 写入: (其中的读取和写入时我认为比较重要的,所以单独做成了目录,这里的读取和写入是指在进行sql注入的时候与本地文件进行的交互) 好久没发博客了。。。从这篇开始的小迪安全学习笔记就开始…...
56_多级缓存实现
1.查询Tomcat 拿到商品id后,本应去缓存中查询商品信息,不过目前我们还未建立Nginx、Redis缓存。因此,这里我们先根据商品id去Tomcat查询商品信息。此时商品查询功能的架构如下图所示。 需要注意的是,我们的OpenResty是在虚拟机,Tomcat是在macOS系统(或Windows系统)上,…...
每日进步一点点(网安)
今日练习题目是PHP反序列化,也学习一下说明是序列化和反序列化 1.PHP序列化 序列化是指将数据结构或对象转换为可传输或可储存的格式的过程。这通常需要将数据转换为字节流或者其他编码格式,以便在不同系统和应用程序之间进行传输或存储 在PHP中&…...
宝塔php7.4安装报错,无法安装,php8以上可以安装,以下的不行,gd库什么的都正常
宝塔的依赖问题导致的问题,最后手动挂载后才解决。。。废了三天三夜终于搞好了。。。。无语~ 建议:不要一直升级宝塔版本,升级前备份或者开服务商的实例镜像,方便恢复,不然,可就GG了࿵…...
SDL2:PC端编译使用
SDL2:PC端编译使用 1. SDL2:PC端编译使用1.1 安装必要的依赖1.2 下载编译SDL21.3 SDL2使用示例:Audio1.4 运行示例程序 1. SDL2:PC端编译使用 1.1 安装必要的依赖 首先,确保安装了编译SDL2所需的依赖库: …...
Windows 蓝牙驱动开发-蓝牙设备栈
蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块,以…...
docker一张图理解
1、push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。参数说明: –disable-content-trust : 忽略镜像的校验,默认开启 # 上传本地镜像myapache:v1到镜像仓库中。 docker push myapache:v1 1.2、search 从Docker Hub查找镜像。参数说明: –…...
RocketMQ、Kafka、RabbitMQ,如何选型?
如何根据应用场景选择合适的消息中间件? 分布式、微服务、高并发架构中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色。 消息队列用于实现系统间的异步通信、解耦、削峰填谷等功能。 目前常见的MQ实现包括RabbitMQ、Rock…...
RabbitMQ故障全解析:消费、消息及日常报错处理与集群修复
文章目录 前言:1 消费慢2 消息丢失3 消息重复消费4 日常报错及解决4.1 报错“error in config file “/etc/rabbitmq/rabbitmq.config” (none): no ending found”4.2 生产者发送消息报错4.3 浏览器打开IP地址,无法访问 RabbitMQ(白屏没有结…...
无公网IP 实现外网访问本地 Docker 部署 Navidrome
Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用,它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…...
pnpm add 和 pnpm install 的区别?
文章目录 1. pnpm add2. pnpm install3. 总结应用场景示例 在使用 pnpm 管理项目依赖时, pnpm add 和 pnpm install 是两个常用的命令,但它们的功能和使用场景有所不同。以下是详细的解释: 1. pnpm add 功能:用于向项目的 pack…...
Linux:文件描述符fd、系统调用open
目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档࿰…...
CPU负载与CPU使用率之区别
在日常的性能测试与系统监控中,CPU负载和CPU使用率是两个常见的指标,它们经常被提及,但也经常被混淆。本文将为你深入解析两者的区别,以及它们各自的意义和应用场景,让你更清楚地掌握这些关键性能指标。 存储、内存和 …...
C++实现设计模式---外观模式 (Facade)
外观模式 (Facade) 外观模式 是一种结构型设计模式,为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口,使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口,屏蔽子系统的内部细节。 …...
Vue 过滤器详解及 Vue 3 中的替代方案
Vue 过滤器详解及 Vue 3 中的替代方案 一、Vue 过滤器的核心概念与特性 Vue 过滤器(Filter)是 Vue 2.x 提供的用于数据格式化转换的机制,其核心设计理念是不修改原始数据,仅对显示层进行格式化处理。过滤器本质上是纯函数…...
Win10 22H2多合一版本实测:家庭版/专业版/企业版到底有什么区别?
Win10 22H2多合一版本深度解析:如何根据需求选择最佳系统版本 当你面对一个包含家庭版、专业版、企业版等多个版本的Win10 22H2多合一ISO镜像时,是否曾感到困惑:这些版本之间究竟有什么区别?哪个版本最适合我的使用场景࿱…...
Cadence实战:从原理图到PCB的完整导入流程解析
1. Cadence设计流程概述 刚接触Cadence的硬件工程师常会遇到一个经典问题:为什么原理图设计得漂漂亮亮,导入PCB时却总出各种幺蛾子?这就像做菜时备好了所有食材,下锅时却发现灶台点不着火。我在带新人时发现,90%的导入…...
解锁旧Mac新生命:技术伙伴如何突破苹果限制
解锁旧Mac新生命:技术伙伴如何突破苹果限制 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否曾想过,那些被苹果官方"抛弃"的老旧Ma…...
Wan2.2-I2V-A14B在微信小程序开发中的应用:实时图片转视频功能实现
Wan2.2-I2V-A14B在微信小程序开发中的应用:实时图片转视频功能实现 1. 引言 "一张照片能变成视频吗?"这是很多社交类小程序用户常有的疑问。想象一下,用户在电商小程序上传商品图片后,系统自动生成一段展示视频&#…...
告别Windows AI困扰:RemoveWindowsAI工具全方位解决方案
告别Windows AI困扰:RemoveWindowsAI工具全方位解决方案 【免费下载链接】RemoveWindowsAI Force Remove Copilot and Recall in Windows 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindowsAI 在数字时代的隐私保卫战中,Windows系…...
【SpringAI篇04】:从内存到MySQL,构建可重启的智能对话系统
1. 为什么需要从内存存储升级到数据库持久化 刚开始接触SpringAI开发时,很多开发者都会选择默认的内存存储方案。这种方案简单直接,不需要额外配置数据库,特别适合快速原型开发。但当你真正要把应用部署到生产环境时,就会发现内存…...
163MusicLyrics:双平台歌词提取的终极解决方案
163MusicLyrics:双平台歌词提取的终极解决方案 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否曾为寻找一首心爱歌曲的完整歌词而辗转多个平台…...
边缘计算中的存储挑战与解决方案
边缘计算中的存储挑战与解决方案 背景 作为一个专注于存储架构的技术人,我一直在关注边缘计算的发展。最近团队在部署边缘计算解决方案时,遇到了许多存储相关的挑战。为了帮助团队更好地理解和解决这些挑战,我决定写这篇实践指南。 边缘计算的…...
SillyTavern角色卡片系统全解析:从技术原理到实战应用
SillyTavern角色卡片系统全解析:从技术原理到实战应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 技术原理:PNG元数据驱动的角色存储机制 SillyTavern角色卡片…...
