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”]
,因此它对我没有用处。为了对我有用,它应该返回一个空数组。哦,有趣的是,在ES5Object中。键仍然在原语上抛出……我想你应该只在对象上测试这一点,之前过滤数字/布尔值/字符串。