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

Javascript 如何检查变量是否是开发人员未定义自己属性的对象?,javascript,string,object,types,hasownproperty,Javascript,String,Object,Types,Hasownproperty,在我的代码中,有一个变量有时是: 一个数字 布尔值 一串, 正则表达式 约会 具有0个或多个“自有”属性的对象 我想检查这个变量是否是“基本对象”。我将“基本对象”定义为: 一个数字 布尔值 一串, 正则表达式 约会 或者,换句话说,一个没有开发人员定义的“自己”属性的对象 我使用了条件Object.getOwnPropertyNames(obj).length==0,但是字符串(根据上面的定义,它们是“基本对象”)对于每个字符和字符串的长度都有“自己的”属性。例如,如果我运行Objec

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

  • 一个数字
  • 布尔值
  • 一串,
  • 正则表达式
  • 约会
  • 具有0个或多个“自有”属性的对象
我想检查这个变量是否是“基本对象”。我将“基本对象”定义为:

  • 一个数字
  • 布尔值
  • 一串,
  • 正则表达式
  • 约会
或者,换句话说,一个没有开发人员定义的“自己”属性的对象

我使用了条件
Object.getOwnPropertyNames(obj).length==0
,但是字符串(根据上面的定义,它们是“基本对象”)对于每个字符和字符串的长度都有“自己的”属性。例如,如果我运行
Object.getOwnPropertyNames(“测试”)
在Chrome(Ubuntu 15.10上的46.0.2490.86(64位))DevTools控制台和Ubuntu 15.10上的Firefox 42中,它都会打印
[“0”、“1”、“2”、“3”、“长度”]
(在Chrome中)和
[“长度”、“0”、“1”、“2”、“3”]
(在Firefox中)

那么,检查变量是否是上述术语中的“基本对象”的最可读方法是什么?我对性能不感兴趣,但对可读性和调试的简易性感兴趣

多谢各位<代码>:-)

更新:

我开始使用这个函数,虽然我希望有人会给我一个解决方案,它与新类型兼容而不做任何更改

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

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

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

数字、布尔值和字符串通常不是对象?您可以尝试使用
Object.keys
,它只考虑可枚举性properties@Bergi,在Firefox和Chrome中,
Object.keys(“test”)
返回
[“0”、“1”、“2”、“3”]
,因此它对我没有用处。为了对我有用,它应该返回一个空数组。哦,有趣的是,在ES5
Object中。键仍然在原语上抛出……我想你应该只在对象上测试这一点,之前过滤数字/布尔值/字符串。