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

在 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 属性或被修改过,这可能导致此方法不准确。在实际应用中,你可能需要根据具体情况调整或增强这个方法的逻辑。

posted @   王铁柱6  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示