使用js写个方法区分原生与非原生的对象

news/2025/1/3 8:09:09/文章来源:https://www.cnblogs.com/ai888/p/18643061

在 JavaScript 中,原生对象通常是指 JavaScript 引擎提供的基本对象,如 Object, Array, String, Number, Boolean 等。非原生对象通常指的是开发者自定义的对象。

要区分一个对象是否是原生对象,你可以检查该对象的构造函数是否是 JavaScript 引擎提供的原生构造函数之一。以下是一个简单的方法,用于检查一个对象是否是原生对象:

function isNativeObject(obj) {if (typeof obj !== 'object' || obj === null) {return false; // 非对象或 null 值不是原生对象}const constructorName = obj.constructor.name;const nativeConstructors = ['Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'Date', 'RegExp', 'Error'];return nativeConstructors.includes(constructorName);
}// 测试
const nativeObj = {};
const customObj = Object.create(null);
customObj.constructor = function CustomObject() {};console.log(isNativeObject(nativeObj)); // 输出: true
console.log(isNativeObject(customObj)); // 输出: false

这个方法首先检查传入的值是否是对象类型且不为 null。然后,它获取对象的构造函数名称,并检查该名称是否包含在一组预定义的原生构造函数名称中。

需要注意的是,这个方法可能无法完美地处理所有情况,特别是当对象的构造函数被修改或覆盖时。但在大多数情况下,它应该能够提供一个合理的判断。

另外,如果你想要更精确地检测某个特定的原生类型,你可以直接使用 Array.isArray(), typeof obj === 'string' 等更具体的方法。

还要注意,有些对象可能没有 constructor 属性或被修改过,这可能导致此方法不准确。在实际应用中,你可能需要根据具体情况调整或增强这个方法的逻辑。

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

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

相关文章

如何优化数据库查询速度,特别是使用多个CONTAINS条件时?

您好,当您在数据库查询中使用多个CONTAINS条件时,查询速度可能会显著下降。为了优化这种查询,您可以采取以下几种方法: 首先,确保数据库中有适当的索引。索引是提高查询速度的关键。对于包含全文搜索条件的查询,创建全文索引是非常有效的。以MySQL为例,您可以使用以下命…

如何找回宝塔面板的登录网址?

如果您忘记了宝塔面板的登录网址,可以通过以下步骤来找回或重新设置:检查服务器IP地址: 宝塔面板的默认访问地址通常是 http://<服务器IP>:8888 或者 https://<服务器IP>:8888。您可以登录到您的服务器提供商控制台,找到您服务器的公网IP地址。查看宝塔面板安装…

如何解决宝塔面板无法打开的问题?

当您遇到宝塔面板无法打开的情况时,可能是由多种原因引起的。以下是一些常见的排查步骤和解决方案,帮助您快速恢复宝塔面板的正常访问:检查服务器状态: 首先确认服务器是否正常运行。您可以登录到服务器提供商的控制台,查看服务器的状态。如果服务器处于关机或重启状态,请…

服务器流量增大速度太快怎么办?

当您发现服务器流量增大速度过快时,这可能是由多种原因引起的,包括但不限于恶意流量、内容被频繁请求或存储容量不足。为了有效应对这种情况,以下是详细的解决方案和预防措施:分析流量来源:使用流量监控工具(如AWStats、Google Analytics等)详细分析流量来源。找出哪些页…

宝塔面板初始密码错误无法登录怎么办?

当您遇到宝塔面板初始密码错误无法登录的问题时,这可能是由于密码输入错误、配置问题或其他技术原因引起的。为了帮助您尽快恢复正常使用,以下是详细的解决方案和预防措施:核对密码输入:确认输入的用户名和密码是否准确无误。有时可能会因为复制粘贴时带上多余的空格或字符…

服务器突然无法远程登录怎么办?

当您遇到服务器突然无法远程登录的问题时,这可能是由多种原因引起的,包括但不限于网络连接问题、服务器配置错误或权限设置不当。为了帮助您尽快恢复正常使用,以下是详细的解决方案和预防措施:检查网络连接:确认您的本地网络连接正常,能够访问互联网。尝试从不同的网络环…

云上攻防-云服务弹性计算服务器云数据库实例元数据控制角色AK控制台接管

云服务&弹性计算服务器&云数据库&实例元数据&控制角色&AK控制台接管知识点: 1、云服务-弹性计算服务器-元数据&SSRF&AK 2、云服务-云数据库-外部连接&权限提升 章节点:云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等 云厂商攻防:…

当AI涌入科学期刊:它能帮助我们分辨真与假吗?

图片由Gabriel Sollmann提供,来源于Unsplash前言:在人工智能快速发展的时代,AI正在从协助工具向独立内容生产者转变,甚至进入科学研究领域。然而,AI在科学写作中的能力是否足以胜任?作者通过一系列案例,揭示了AI生成内容在科学期刊中的泛滥,以及由此引发的编辑困境和学…

回顾 2024 年 19 期C#/.NET/.NET Core技术前沿周刊

前言 转眼之间2024年就只剩最后一天了,咱们的C#/.NET/.NET Core技术前沿周刊也从8月份的第 1 期持续更新到现在已经更新到了第 19 期了,今天咱们一起来回顾一下 2024 年 19 期C#/.NET/.NET Core技术前沿周刊,2025年继续加油。 技术前沿周刊 C#/.NET/.NET Core技术前沿周刊,…

《深入理解Mybatis原理》MyBatis初始化机制详解

主要构件及其相互关系 主要构件:主要的核心部件解释如下:SqlSession: 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能 Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护 StatementHandler: 封装了J…

Docker安装与配置

由于格式和图片解析问题,为了更好的阅读体验,可以前往 阅读原文为什么出现Docker?传统的开发和部署存在着许多环境和配置的不兼容的问题,docker就是将环境和代码统一打包的来解决这些兼容问题。Docker是一个统一了运行环境和配置问题的虚拟容器技术,是一个内核级虚拟技术。…

读数据保护:工作负载的可恢复性22DR运行手册

DR运行手册1. 购买DR软件 1.1. 自行选购DR软件,意味着你可以把它安装到你自己所管理的服务器上1.1.1. 服务器可能是实体机1.1.2. 能是你所拥有的(或你向云平台购买的)虚拟机1.2. 必须全面负责它们的安保工作1.2.1. 任何一个安保疏失,都是你的责任1.2.2. 必须确保硬件、操作…