对对象使用 JavaScript 的 typeof 运算符
对象在使用时可能会有点令人沮丧 typeof
运算符 因为 typeof
两者都返回对象 null
和 []
,要处理这些情况,您有几个选择。 第一个选项是硬编码 if
声明如下:
let test = { firstName: 'Masteringjs', lastName: 'io' };
if (typeof test === 'object' && !Array.isArray(test) && test != null) {
// do some really cool stuff
}
无论您使用 Array.isArray()
检查取决于您的用例。 有些情况下您希望将数组视为对象,有些情况下您不想。
另一个极端情况是 typeof
返回函数的函数,但函数在技术上是对象。函数没有 JavaScript 原语 ,函数是从全局继承的对象 Function
类。 要检查一个值是否是一个对象,包括函数,您可以使用 instanceof
运算符 如下所示。
const fn = () => {};
typeof fn; // 'function'
fn instanceof Object; // true
检查 POJO
此检查将允许任何对象通过,包括作为类实例的对象。 如果你需要更严格的检查来检查一个对象是否是一个普通的旧 JavaScript 对象(或 POJO ),你可以使用下面的函数。
function isPOJO(arg) {
if (arg == null || typeof arg !== 'object') {
return false;
}
const proto = Object.getPrototypeOf(arg);
if (proto == null) {
return true; // `Object.create(null)`
}
return proto === Object.prototype;
}
isPOJO({}); // true
isPOJO(Object.create(null)); // true
isPOJO(null); // false
isPOJO(new Number(42)); // false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 如何确定一个值是否为空
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论