如何检查变量是否是开发人员没有定义自己属性的对象?

时间:2015-11-26 13:19:06

标签: javascript string object types hasownproperty

在我的代码中,有一个变量有时是以下之一:

  • 一个数字,
  • 布尔值,
  • 一个字符串,
  • 正则表达式,
  • 约会,
  • 具有0个或更多"拥有" 属性的对象。

我想检查该变量是否是"基本对象" 。我将"基本对象" 定义为:

  • 一个数字,
  • 布尔值,
  • 一个字符串,
  • 正则表达式,
  • 约会,

或者换句话说,一个没有"拥有" 属性的对象由开发人员定义。

我使用条件Object.getOwnPropertyNames(obj).length === 0但是字符串(根据上面的定义,"基本对象" )有"拥有&每个字符的#34; 属性以及字符串的长度。例如,如果我运行Object.getOwnPropertyNames("test") 在Chrome(Ubuntu 15.10上的46.0.2490.86(64位))DevTools控制台和Ubuntu 15.10上的Firefox 42上,它打印["0", "1", "2", "3", "length"](在Chrome中)和[ "length", "0", "1", "2", "3" ](在Firefox中)。

那么,检查变量是否是"基本对象" 作为上述术语的最可读方式是什么?我对性能不感兴趣,但对可读性和调试的简便性感兴趣。

非常感谢! :-)

更新

我开始使用这个功能,虽然我希望有人能给我一个与新类型兼容的解决方案而不做任何改动。

function isElementaryValue(x) {
    return typeof x === "number" ||
        typeof x === "boolean" ||
        typeof x === "string" ||
        x instanceof RegExp ||
        x instanceof Date;
}

1 个答案:

答案 0 :(得分:2)

你必须为此编写一个非常定制的函数,因为这些类型并没有太多共同之处:

function isElementary (arg) {
  return arg === null
    || arg === undefined 
    || (typeof arg !== 'object' && typeof arg !== 'function') 
    || arg instanceof RegExp 
    || arg instanceof Date;
}