如何在 JavaScript 中检查参数是否是对象(而不是数组)

2023-12-12

测试出来后instasnceof我发现如果参数是数组或对象文字,它将返回 true。

function test(options){
  if(options instanceof Object){alert('yes')}//this will alert for both arrays and object literals
}
test({x:11})// alerts
test([11])// alerts as well but I do not want it to

有没有办法测试参数“options”是否是对象文字?

附:我正在创建一个允许用户访问其配置选项的模块,并且我想测试参数是否只是一个对象字面量 or not?


有没有办法测试参数“options”是否是对象文字?

不,因为这没有意义。你可以测试一下是否是object,但是它是如何创建的(通过函数调用中的文字,通过其他地方的文字,通过new Object,通过反序列化 JSON 字符串,...) 不是维护的信息。

测试完 instasnceof 后,我发现如果参数是数组或对象文字,它将返回 true

正确的。 JavaScript 中的数组是对象(并且不是真正的数组).

如果你想测试一个对象是否是一个普通的旧对象,你可以这样做:

if (Object.prototype.toString.call(options) === "[object Object]") {
    // It's a plain object
}

但确实没有理由这样做。这不是你的问题。只要他们传递给您的内容具有您期望的属性,就不要试图进一步限制该对象。

附注我正在制作一个模块,允许用户传递配置选项,并且我想进行测试以确保参数只是一个对象文字。

为什么?如果用户想使用一个尚未被声明为文字的对象,那么你为什么要关心呢?如果他们想使用通过不同的构造函数创建的对象(例如,而不仅仅是一个普通对象),那么你为什么要关心呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中检查参数是否是对象(而不是数组) 的相关文章

随机推荐