0

使用时

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

我收到 jslint 错误:

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

然而,这种形式(下图)会产生不同的结果。

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

我使用术语 objectAbstract 与 objectLiteral 区分开来,后者将是更简单的形式var object_literal = {}

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

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

4

1 回答 1

2

JSLint 在这里显示出对 Javascript 的了解不足,并认为您在做new Object(),这不是创建新对象的推荐方法。推荐的方式是对象字面量或Object.create.

但是,带参数调用Object是完全不同的。它通常用于检测某事物是原始类型还是引用类型。

您可以使用以下方法解决 JSLint:

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

请注意,就像我上面所说的那样,这您描述的“检测抽象对象”完全不同。一个适当的名称将是isReferenceisReferenceType或其他。

于 2013-06-10T15:43:20.537 回答