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) 外观模式 是一种结构型设计模式,为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口,使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口,屏蔽子系统的内部细节。 …...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...
