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

时间:2013-06-10 15:08:15

标签: javascript jslint

使用时

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

我收到了jslint错误:

  

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

但是这种形式(下面)会产生不同的结果。

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

我使用术语objectAbstract来区分objectLiteral,它可以是更简单的var object_literal = {}形式。

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

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

1 个答案:

答案 0 :(得分:2)

JSLint在这里显示Javascript知识不足,并认为你在做new Object(),但事实并非如此 建议的创建新对象的方法。推荐的方式是object literal或Object.create

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

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

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

请注意,就像我上面所说的那样,就像“检测抽象对象”一样。一个正确的名称是isReferenceisReferenceType或其他。