在我的代码中有一个变量,有时是以下之一:
>一个数字,
>一个布尔值,
>一个字符串,
>一个正则表达式,
>约会,
>具有0个或更多“自有”属性的对象.
我想检查该变量是否是“基本对象”.我将“基本对象”定义为:
>一个数字,
>一个布尔值,
>一个字符串,
>一个正则表达式,
>约会,
或者,换句话说,开发人员定义的没有“自己”属性的对象.
我使用了条件Object.getOwnPropertyNames(obj).length === 0但是字符串(根据上面的定义,它是“基本对象”)对每个字符和字符串的长度都有“自己的”属性.例如,如果我运行Object.getOwnPropertyNames(“test”)
在Chrome(Ubuntu 15.10上的46.0.2490.86(64位))DevTools控制台和Ubuntu 15.10上的Firefox 42上,它打印[“0”,“1”,“2”,“3”,“长度”] 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;
}
最佳答案 你必须为此编写一个非常定制的函数,因为这些类型没有太多共同之处:
function isElementary (arg) {
return arg === null
|| arg === undefined
|| (typeof arg !== 'object' && typeof arg !== 'function')
|| arg instanceof RegExp
|| arg instanceof Date;
}