使用 typeof bar===” object”可以确定bar是不是对象的潜在陷阱,如何避免这个陷阱?
在JavaScript中,typeof运算符返回一个字符串,表示未经计算的操作数的类型。当使用typeof bar = “object”时,确实存在一些潜在的陷阱。例如,的类型也会被typeof判断为”object”,而数组和函数(实际上也是对象)的类型被判断为”object”和”function”。
避免这个陷阱的一种方法是首先检查值是否为,然后再检查其类型。例如:
if (bar !== && typeof bar === "object") {
// bar 是一个非对象
}
如果你想在数组和普通对象之间进行区别,可以使用Array.isArray()函数,或者使用Object.prototype.toString.call()方法:
if (typeof bar === "object" && !Array.isArray(bar) && bar !== ) {
// bar 是一个非数组对象
}
如果你想要排除函数,可以再加一个条件:
if (typeof bar === "object" && !Array.isArray(bar) && bar !== && typeof bar !== 'function') {
// bar 是一个非数组非函数对象
}
这样就可以避免这个陷阱了。