当前位置: 首页 > news >正文

了解一些常用的Javascript对象方法

javascript 的对象包含许多有用的方法,可以帮助开发人员轻松操作对象。让我们通过简短的解释和示例来了解一些最重要的内容

  1. object.create()
  2. object.assign()
  3. object.keys()
  4. object.values()
  5. object.entries()
  6. object.freeze()
  7. object.seal()
  8. object.preventextensions()
  9. object.getprototypeof()
  10. object.setprototypeof()
  11. object.defineproperty()
  12. object.defineproperties()
  13. object.getownpropertydescriptor()
  14. object.getownpropertydescriptors()
  15. object.getownpropertynames()
  16. object.is()
  17. object.isfrozen()
  18. object.issealed()
  19. object.isextensible()
  20. object.fromentries()
  21. object.hasownproperty()
  22. object.hasown()
  23. object.groupby()(提议的功能,可能不完全可用)

object.create()
object.create() 是 javascript 中的一个方法,用于创建具有指定原型对象和可选属性的新对象。与使用对象文字或构造函数相比,它允许对对象的原型和属性进行更细粒度的控制。

const personprototype = {greet() {console.log(`hello, my name is ${this.name}`);}
};const john = object.create(personprototype);
john.name = "john";
john.greet();  // output: hello, my name is john

object.assign()
object.assign() 是一种内置 javascript 方法,用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。它执行浅复制并返回修改后的目标对象。

const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = object.assign(target, source);
console.log(result);  // output: { a: 1, b: 2, c: 3 }
console.log(target);  // output: { a: 1, b: 2, c: 3 } (target is also modified)

object.keys()
返回对象自己的可枚举属性名称(键)的数组

const obj = { a: 1, b: 2, c: 3 };
console.log(object.keys(obj));  // output: ['a', 'b', 'c']

object.values()
返回对象自身可枚举属性值的数组

 

const obj = { a: 1, b: 2, c: 3 };
console.log(object.values(obj));  // output: [1, 2, 3]

object.entries()
返回对象自身可枚举属性 [key, value] 对的数组

const obj = { a: 1, b: 2, c: 3 };
console.log(object.entries(obj));  // output: [['a', 1], ['b', 2], ['c', 3]]

object.freeze()
冻结对象,防止添加新属性或更改或删除现有属性

const obj = { a: 1 };
object.freeze(obj);
obj.a = 2;  // no effect, because the object is frozen
console.log(obj.a);  // output: 1

object.seal()
密封对象,防止添加新属性,但允许修改现有属性。

const obj = { a: 1 };
object.seal(obj);
obj.a = 2;  // allowed
delete obj.a;  // not allowed
console.log(obj.a);  // output: 2

object.preventextensions()
防止将任何新属性添加到对象,但允许修改和删除现有属性

const obj = { a: 1 };
object.preventextensions(obj);
obj.b = 2;  // not allowed
console.log(obj.b);  // output: undefined

object.getprototypeof()
返回指定对象
的原型(即内部[[prototype]])

const obj = {};
const proto = object.getprototypeof(obj);
console.log(proto);  // output: {} (the default object prototype)

object.setprototypeof()
设置指定对象的原型。

const proto = { greet() { console.log('hello!'); } };
const obj = {};
object.setprototypeof(obj, proto);
obj.greet();  // output: 'hello!'

object.defineproperty()
在对象上定义一个新属性或修改现有属性,并使用属性描述符的附加选项(例如,可写、可配置)。

const obj = {};
object.defineproperty(obj, 'a', {value: 42,writable: false,  // cannot modify the value
});
obj.a = 100;  // no effect because writable is false
console.log(obj.a);  // output: 42

object.defineproperties()
使用属性描述符在对象上定义多个属性。

const obj = {};
object.defineproperties(obj, {a: { value: 42, writable: false },b: { value: 100, writable: true }
});
console.log(obj.a);  // output: 42
console.log(obj.b);  // output: 100

object.getownpropertydescriptor()
返回对象属性的描述符。

const obj = { a: 1 };
const descriptor = object.getownpropertydescriptor(obj, 'a');
console.log(descriptor);  
// output: { value: 1, writable: true, enumerable: true, configurable: true }

object.getownpropertydescriptors()
返回一个对象,其中包含对象自身属性的所有属性描述符

const obj = { a: 1 };
const descriptors = object.getownpropertydescriptors(obj);
console.log(descriptors);
// output: { a: { value: 1, writable: true, enumerable: true, configurable: true } }

object.getownpropertynames()
返回直接在对象上找到的所有属性(包括不可枚举的属性)的数组。

const obj = { a: 1 };
object.defineproperty(obj, 'b', { value: 2, enumerable: false });
console.log(object.getownpropertynames(obj));  // output: ['a', 'b']

object.is()
比较两个值是否相同(如 === 但处理 nan 等特殊情况)

console.log(object.is(nan, nan));  // output: true
console.log(object.is(+0, -0));    // output: false

object.isfrozen()
检查对象是否被冻结

const obj = object.freeze({ a: 1 });
console.log(object.isfrozen(obj));  // output: true

object.issealed()
检查物体是否被密封。

const obj = object.seal({ a: 1 });
console.log(object.issealed(obj));  // output: true

object.isextensible()
检查是否可以将新属性添加到对象。

const obj = { a: 1 };
object.preventextensions(obj);
console.log(object.isextensible(obj));  // output: false

object.fromentries()
将键值对数组转换为对象

const entries = [['a', 1], ['b', 2]];
const obj = object.fromentries(entries);
console.log(obj);  // output: { a: 1, b: 2 }

object.hasownproperty()
检查对象是否拥有指定的属性(不是继承的)

const obj = { a: 1 };
console.log(obj.hasownproperty('a'));  // output: true

object.hasown()
object.hasown() 是 es2022 中引入的较新方法,作为 object.hasownproperty() 的替代方法。它检查一个对象是否具有带有指定键的直接(自己)属性,而无需查找原型链。

const obj = {name: 'alice',age: 25
};console.log(object.hasown(obj, 'name'));  // true
console.log(object.hasown(obj, 'gender'));  // false

object.groupby
object.groupby 是 ecmascript 2024 中为 javascript 提出的一个相对较新的功能,允许您根据通用标准对对象进行分组。它尚未在所有环境中广泛使用,因此在完全实现之前,它可能无法在许多浏览器或 javascript 引擎中工作。

const array = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 30 },{ name: 'Charlie', age: 25 },{ name: 'David', age: 30 },
];// Group objects by age
const groupedByAge = Object.groupBy(array, item => item.age);console.log(groupedByAge);/*
Expected Output:
{25: [{ name: 'Alice', age: 25 },{ name: 'Charlie', age: 25 }],30: [{ name: 'Bob', age: 30 },{ name: 'David', age: 30 }]
}
*/

相关文章:

了解一些常用的Javascript对象方法

javascript 的对象包含许多有用的方法,可以帮助开发人员轻松操作对象。让我们通过简短的解释和示例来了解一些最重要的内容 object.create()object.assign()object.keys()object.values()object.entries()object.freeze()object.seal()object.preventextensions()o…...

【知识科普】GraphQL一个强大的API查询语言

文章目录 概述📚 GraphQL 的类型系统是如何工作的?🔍 能否举例说明 GraphQL 的类型系统在实际应用中是如何工作的?位置步骤 1: 定义类型步骤 2: 实现解析器步骤 3: 客户端查询步骤 4: 执行查询 🛠️ 在实际开发中&…...

Spring Boot 整合达梦

Maven 依赖 <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.2.192</version></dependency> yml配置 datasource:master:url: jdbc:dm://192.168.211.113:30236username: WE…...

Vue.js 组件开发基本步骤

Vue.js 是一个构建用户界面的渐进式框架&#xff0c;它被设计为能够轻松地被集成进项目的部分功能&#xff0c;或者用于构建完整的前端应用。组件化是 Vue.js 的核心概念之一&#xff0c;它允许开发者将界面拆分成独立、可复用的组件&#xff0c;每个组件负责应用中的一小部分功…...

博客搭建之路:hexo使用next主题渲染流程图

文章目录 hexo使用next主题渲染流程图 hexo使用next主题渲染流程图 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 next主题的配置文件中搜索找到mermaid&#xff0c;把enable配置改为true mermaid:enable: true# Available themes: default | dark | forest | neutraltheme: de…...

【数据结构与算法】线性表顺序存储结构

文章目录 一.顺序表的存储结构定义1.1定义1.2 图示1.3结构代码*C语言的内存动态分配 二.顺序表基本运算*参数传递2.1建立2.2初始化(InitList(&L))2.3销毁(DestroyList(&L))2.4判断线性表是否为空表(ListEmpty(L))2.5求线性表的长度(ListLength(L))2.6输出线性表(DispLi…...

Unix Standardization and Implementations

Unix标准化 在Unix未制定较为完备的标准时&#xff0c;各个平台的系统调用方式各异&#xff0c;所开发出的应用程序存在可移植性差的特点&#xff0c;因此人们呼吁指定一套Unix标准来规范接口&#xff0c;增加应用程序的可移植性。所谓Unix标准即适用于Unix环境下的一系列函数…...

Windows 与 Java 环境下的 Redis 利用分析

1 前言 在最近的一次攻防演练中&#xff0c;遇到了两个未授权访问的 Redis 实例。起初以为可以直接利用&#xff0c;但后来发现竟然是Windows Java (Tomcat)。因为网上没有看到相关的利用文章&#xff0c;所以在经过摸索&#xff0c;成功解决之后决定简单写一写。 本文介绍了…...

机器视觉系统硬件组成之工业相机篇

工业相机是一种非常重要的机器视觉器件&#xff0c;它能够将被采集的图像信息通过电路转换成电信号&#xff0c;再通过模数转换器&#xff08;ADC&#xff09;将其转化为数字信号&#xff0c;最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用&#xff0c;包括质…...

离线安装bitnami-gitlab8.8.4+汉化

注意&#xff1a; 常规安装gitlab需要联网&#xff0c;而按装bitnami-gitlab无需联网(bitnami-gitlab用于内网环境无法联网时安装gitlab&#xff0c;两者是一个东西只是名字不一样)bitnami-gitlab-8.8.4版本可以汉化成功新用户注册账户无需激活也可以直接登录&#xff0c;因为…...

亚马逊日本站推出AI日语listing功能,Listing一键发布,轻松无忧!

随着大数据与人工智能技术的成熟&#xff0c;AI在电商的应用也越来越多&#xff0c;各大电商平台都在陆续引进AI人工智能&#xff0c;有客服方面的&#xff0c;也有发布Listing方面的。 10月17日消息&#xff0c;亚马逊日本站近日宣布推出一项支持日语的人工智能listing功能&am…...

Golang | Leetcode Golang题解之第475题供暖器

题目&#xff1a; 题解&#xff1a; func findRadius(houses, heaters []int) (ans int) {sort.Ints(houses)sort.Ints(heaters)j : 0for _, house : range houses {dis : abs(house - heaters[j])for j1 < len(heaters) && abs(house-heaters[j]) > abs(house-…...

【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用

上篇文章&#xff1a; 【Vue】Vue3.0 &#xff08;十二&#xff09;、watch对ref定义的基本类型、对象类型&#xff1b;reactive定义的对象类型的监视使用 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&…...

PHP-laravel框架

laravel框架 laravel 搭建与路由基础 基本路由与视图路由 视图使用控制器模板分配变量...

永恒之蓝漏洞

MS17-010是微软于2017年3月发布的一个安全补丁&#xff0c;旨在修复Windows操作系统中的一个严重漏洞&#xff0c;该漏洞被称为“永恒之蓝”&#xff08;EternalBlue&#xff09;。这个漏洞影响了Windows的Server Message Block&#xff08;SMB&#xff09;协议&#xff0c;允许…...

Eking管理易 Html5Upload 前台任意文件上传漏洞复现

0x01 产品描述&#xff1a; ‌Eking管理易是一款专为广告制品制作企业量身定制的管理软件产品&#xff0c;旨在帮助企业实现规范化、科学化管理&#xff0c;提升运营效率和降低运营成本。‌ 该软件由广州易凯软件技术有限公司开发&#xff0c;基于JAVA企业版技术研发&#xff0…...

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件&#xff1a;iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码&#xff1a; Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…...

LeetCode题练习与总结:灯泡开关--319

一、题目描述 初始时有 n 个灯泡处于关闭状态。第一轮&#xff0c;你将会打开所有灯泡。接下来的第二轮&#xff0c;你将会每两个灯泡关闭第二个。 第三轮&#xff0c;你每三个灯泡就切换第三个灯泡的开关&#xff08;即&#xff0c;打开变关闭&#xff0c;关闭变打开&#x…...

ClickFix攻击活动升级:可通过虚假谷歌会议画面传播恶意软件

最近&#xff0c;研究人员报告了一种新的 ClickFix 攻击活动&#xff0c;主要通过诱骗用户访问显示虚假连接错误的欺诈性 谷歌会议的页面&#xff0c;继而借此传播信息窃取恶意软件&#xff0c;主要针对 Windows 和 macOS 操作系统。 ClickFix是网络安全公司Proofpoint在5月份…...

迷茫!能走出迷茫?

我今年40有余&#xff0c;因资质平庸&#xff0c;及特殊的个人经历&#xff0c;仍奋斗在一线。上班近二十年&#xff0c;两件事对我人生走向影响最大&#xff0c;编程和炒股。 下个月要去一家新公司上班。今天算是在现公司工作交接的最后时段。在这家公司干了接近一年&#xff…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...