如何检查x是否为Object而不是String对象

时间:2016-09-05 16:18:53

标签: javascript

到目前为止我所拥有的。

const isNotNullObject = function (x) {
    return (typeof x === "object" && x !== null);
};

它适用于数组和对象。但对于String对象呢!

isNotNullObject(String(5))
false
isNotNullObject(new String(5))
true

对于任何类型的字符串,我想要的是false。请注意,我无法控制调用代码。我无法自行删除new。我需要一个不会创建新String的解决方案,只是出于性能原因检查是否存在相等性。

2 个答案:

答案 0 :(得分:3)

使用 instance of

return (typeof x === "object" && !(x instanceof String) && x !== null)

const isNotNullObject = function(x) {
  return (typeof x === "object" && !(x instanceof String) && x !== null);
};

console.log(
  isNotNullObject(String(5)),
  isNotNullObject(new String(5))
)

答案 1 :(得分:0)

有很多方法可以检查Object / String / Array的类型。

  • 使用type of X运算符

  • Object.prototype.toString.apply(X)

    //表现最差

  • Object.getPrototypeOf(X)

  • X.constructor。

其中X可以是Object / Array / String / Number或Anything。性能比较请参见下图

enter image description here