【发布时间】:2019-12-05 05:17:31
【问题描述】:
我有一个函数需要传递一个对象。我使用typeof 运算符在处理前进行检查。但是看看this link,似乎许多javascript实例,例如数组或正则表达式,都被键入为对象。
我需要我的论点是一个纯对象(例如:{key: value, . . .})。
他们有什么方法可以检查一个变量是否是纯对象,而不必为每个 Object 实例运行特定的测试,比如Array.isArray() ?
【问题讨论】:
-
查看this extensive answer 了解构成普通对象的内容。 “我需要我的论点是一个纯对象” - 为什么?你的函数不需要关心。
-
Boolean(obj) && obj.constructor === Object对您来说是否足够好,知道即使是任何类的实例的对象也不会被匹配? -
Object.getPrototypeOf(variable) === Object.prototype怎么样 -
@Bergi 错误!如果您需要区分普通的 javascript 对象和 HTMLElement、SVGElement、Date 对象、Node 对象等,该怎么办……“您的函数不需要关心”是一个非常判断性的陈述,考虑到您的合同可以指定,“如果参数是一个普通对象,做 X,否则做 Y”!
-
@Michael 是的,我认为一个好的 API 契约不应该是那样的,通过对象的简单性来区分事物是一个坏主意。你有实际用例吗?如果你想找到
HTMLElement(等等),你可以使用instanceof。 “普通对象”是else案例。
标签: javascript object typeof