正确检测抽象对象/引用类型的方法

Correct way to detect abstract objects / reference types?

本文关键字:引用类型 方法 对象 检测 抽象      更新时间:2023-09-26

使用

$P.isObjectAbstract = function (obj) {
    return obj === Object(obj);
};

我得到jslint错误:

第77行字符31使用对象文字符号{}orObject.create (null)。

然而,这个形式(下面)产生不同的结果。

$P.isObjectAbstractZ = function (obj) {
    return obj === Object.create(obj);
};

我使用术语objectAbstract来区别于objectLiteral,后者将具有更简单的形式var object_literal = {}

一个objectAbstract只是一个带有键的东西,可以像localStorage.some_key那样访问(更具体地说,这是一个神奇的主机对象)。

是否有一个jslint正确的方法来测试抽象对象?

JSLint在这里显示了对Javascript的不良了解,并认为您正在做new Object(),这不是创建新对象的推荐方法。建议使用对象字面值或Object.create

用参数调用Object是完全不同的。它通常用于检测某物是基本类型还是引用类型。

你可以使用:

来绕过JSLint
$P.isObjectAbstract = function(obj) {
    return obj === {}.constructor(obj);
};

请注意,就像我上面说的,这并不像"检测抽象对象"那样。适当的名称应该是isReferenceisReferenceType或其他。