JavaScript 实现对象长度的获取

JavaScript 实现对象长度的获取

在 JavaScript 中,要获取对象的长度(即对象中属性的数量),可以使用以下几种方法:

  1. 使用 Object.keys():该方法返回一个对象自身(即不包括继承属性)可枚举属性的数组。
  2. 使用 Object.getOwnPropertyNames():该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性,但不包括 Symbol 属性)。
  3. 使用 Reflect.ownKeys():该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性和 Symbol 属性)。
  4. 使用 for...in: 该方法依次访问一个对象及其原型链中所有可枚举的属性。

以下是每种方法的示例代码:

使用 Object.keys()

const x = {f: 6,
};const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;Object.defineProperty(obj, "d", {value: 4,enumerable: false,
});const symbolKey = Symbol("e");
obj[symbolKey] = 5;const length = Object.keys(obj).length;
console.log(length); // 输出 3

说明

  • Object.keys() 只计算对象自身(即不包括继承属性)的可枚举属性。
  • 添加了一个继承属性 f、一个不可枚举属性 d 和一个 Symbol 属性 symbolKey
  • 输出对象 obj 的长度为 3。

使用 Object.getOwnPropertyNames()

const x = {f: 6,
};const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;Object.defineProperty(obj, "d", {value: 4,enumerable: false,
});const symbolKey = Symbol("e");
obj[symbolKey] = 5;const length = Object.getOwnPropertyNames(obj).length;
console.log(length); // 输出 4

说明

  • Object.getOwnPropertyNames() 计算对象自身(即不包括继承属性)的所有属性,包括不可枚举属性(除了 Symbol 属性)。
  • 添加了一个继承属性 f、一个不可枚举属性 d 和一个 Symbol 属性 symbolKey
  • 输出对象 obj 的长度为 4。

使用 Reflect.ownKeys()

const x = {f: 6,
};const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;Object.defineProperty(obj, "d", {value: 4,enumerable: false,
});const symbolKey = Symbol("e");
obj[symbolKey] = 5;const length = Reflect.ownKeys(obj).length;
console.log(length); // 输出 5

说明

  • Reflect.ownKeys() 计算对象自身的(即不包括继承属性)所有属性,包括不可枚举属性和 Symbol 属性。
  • 添加了一个继承属性 f、一个不可枚举属性 d 和一个 Symbol 属性 symbolKey
  • 输出对象 obj 的长度为 5。

使用 for...in 语句

const x = {f: 6,
};const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;Object.defineProperty(obj, "d", {value: 4,enumerable: false,
});const symbolKey = Symbol("e");
obj[symbolKey] = 5;let count = 0,count_all = 0;
for (let key in obj) {if (obj.hasOwnProperty(key)) {count++;}count_all++;
}
console.log(count); // 3
console.log(count_all); // 4

说明

  • 使用 for...in 循环遍历对象的属性并计数的方法来获取对象的长度,可计算自有属性和继承属性,但不包括不可枚举属性和 Symbol 属性。
  • 添加了一个继承属性 f、一个不可枚举属性 d 和一个 Symbol 属性 symbolKey

通过上述方法,可以根据不同需求,选择合适的方法来获取对象的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

责任链模式的应用与解析

目录 责任链模式责任链模式结构责任链模式适用场景责任链模式优缺点练手题目题目描述输入描述输出描述题解 责任链模式 责任链模式,亦称职责链模式、命令链,是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每…

ffmpeg解析pcm文件进行播放

初始化音频子系统是使用 SDL 播放音频之前的一个必要步骤。这确保了 SDL 能够正确地配置和使用音频硬件。如果你不进行初始化,试图使用音频功能可能会导致未定义的行为或错误。 为什么需要初始化音频子系统? 1.资源分配: SDL 需要为音频设备分…

06-用户画像 + es映射+写入数据

es映射 创建用映射表 外部表删除时不会删除行数据,只删除元数据 内部表数据会全部删除 一下创建的是外部表 -- 创建映射表,指向es create external table db_ods.es_users(id int,username string,gender string )stored by org.elasticsearch.hadoop.h…

26.8 Django多表操作

1. 表关系 表关系在数据库中指的是表与表之间的连接和依赖关系. 这种关系定义了数据如何在不同的表之间进行交互和关联, 是实现数据一致性和完整性的重要手段.1.1 关系分类 多表关系在数据库中通常分为以下几种类型: * 1. 一对一(One-to-One)关系: 在数据库中, 这种关系通常通…

模拟建造游戏:城市:天际线2(都市天际线2)中文免安装,解压即撸

《城市:天际线2》(Cities: Skylines II)是一款模拟经营游戏,由Colossal Order开发,Paradox Interactive发行。 下载地址:https://pan.quark.cn/s/84e69332ec3e 更多游戏:https://kdocs.cn/l/cuH…

spring 中的属性解析器 PropertyResolver

我们知道,在 spring 中可以使用占位符,格式如 "${}",大括号中间放置待替换的占位符,待使用值时根据配置的属性解析器进行解析。但具体是如何操作的,且看本文来进行分析。 PropertyResolver 这是一个针对任…

基于Neo4j将知识图谱用于检索增强生成:Knowledge Graphs for RAG

Knowledge Graphs for RAG 本文是学习https://www.deeplearning.ai/short-courses/knowledge-graphs-rag/这门课的学习笔记。 What you’ll learn in this course Knowledge graphs are used in development to structure complex data relationships, drive intelligent sea…

GDAL访问HDFS集群中的数据

1.集群搭建 参考文章:hadoop2.10.0完全分布式集群搭建 HA(QJM)高可用集群搭建_hadoop 2.10 ha-CSDN博客 创建文件夹 hdfs dfs -mkdir -p hdfs://192.168.80.132:9000/test 开放权限 hdfs dfs -chmod -R 777 /test 上传文件 hadoop fs -put /home/wh/data/res…

卡夫卡(Kafka)框架详解:从背景到应用实践

卡夫卡(Kafka)框架详解:从背景到应用实践 引言 在大数据和分布式系统日益普及的今天,数据处理和消息传递成为了支撑复杂业务系统的关键基础设施。Apache Kafka,作为一个高性能的分布式消息队列系统,因其高…

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效 本篇,推荐给你几个按钮,先看一下图片 本例图片 案例分析 这是一个系列的按钮,它们具有共同的特点: 底层按钮层,具有一个彩色的渐变边框&#…

第十四章 数据库

第十四章 数据库 14.1 引言 数据存储在传统上是使用单独的没有关联的文件,称为平面文件 14.1.1 定义 定义:数据库是一个组织内被应用程序使用的逻辑相一致的相关数据的集合 14.1.2 数据库的优点 数据库的优点: 冗余少避免数据的不一致…

docker产生日志过大优化

1、Docker容器启动后日志存放位置 #cat /var/lib/docker/containers/容器ID/容器ID-json.log #echo >/var/lib/docker/containers/容器ID/容器ID-json.log临时清除日志 注:echo一个空进去,不需要重启容器,但如果你直接删除这个日志&…

【JavaEE】Bean的作用域和生命周期

一.Bean的作用域. 1.1 Bean的相关概念. 通过Spring IoC和DI的学习(不清楚的可以看的前面写过的总结,可以快速入门, http://t.csdnimg.cn/K8Xr0),我们知道了Spring是如何帮助我们管理对象的 通过 Controller , Service , Repository , Component , Configuration , Bean 来声明…

无人机之航拍高级操作与技巧

一、直线飞行与矩形飞行练习:通过直线和矩形路径的练习,提升飞行路径控制能力。 二、航点命令和事件编程:学习如何设置航点命令和事件,使无人机能够自动执行复杂任务。 三、故障诊断与处理:掌握基本的故障诊断方法和…

如何使用 API list 极狐GitLab 群组中的镜像仓库?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

深入指南:VitePress 如何自定义样式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Linux Shell——用awk计算相邻两行相减

如何用awk计算相邻两行相减 下面是将文件的第二列数据进行相邻两行相减的操作: awk NR1{tmp$2}NR>1{print $2-tmp;tmp$2} test.txt

2 Go语言的基础代码解析

本专栏将从基础开始,循序渐进,由浅入深讲解Go语言,希望大家都能够从中有所收获,也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方,请指正!大家一起学习,…

PHP安全编程宝典:30000字精细解析

文章目录 基础语法单双引号的区别前后端分离数据类型PHP常量函数var_dump函数count函数print_r函数**readfile()函数****file_get_contents()函数****file_put_contents()函数**header函数fopen函数fread 函数rename函数copy()函数…

【时时三省】(C语言基础)结构体

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 结构体 结构体使得C语言有能力描述复杂类型。 结构体可以让c语言创造新的类型出来 示例: struct Stu { char name[20] (名字的话是一个字…