4

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

  • 一个号码,
  • 一个布尔值,
  • 一个字符串,
  • 一个正则表达式,
  • 一个约会,
  • 具有 0 个或多个“自己的”属性的对象。

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

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

或者,换句话说,一个没有开发人员定义的“自己的”属性的对象。

我使用了条件Object.getOwnPropertyNames(obj).length === 0,但是字符串(根据上面的定义,是“基本对象”)对于每个字符和字符串的长度都有“自己的”属性。例如,如果我Object.getOwnPropertyNames("test") 在 Ubuntu 15.10 上的 Chrome(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;
}
4

1 回答 1

2

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

function isElementary (arg) {
  return arg === null
    || arg === undefined 
    || (typeof arg !== 'object' && typeof arg !== 'function') 
    || arg instanceof RegExp 
    || arg instanceof Date;
}
于 2015-11-26T13:26:15.803 回答