typeof bar === “object“ 判断bar 是不是一个对象有什么弊端

使用 typeof bar === "object" 来判断 bar 是否为一个对象在JavaScript中有一些弊端和限制:

Null 的问题:在JavaScript中,null 是一个表示“无”或“空”的特殊值,但 typeof null 的结果实际上是 "object"。这是一个历史遗留的错误,因此如果你只是用 typeof 来检查对象,你可能会错误地将 null 也当作一个对象。
正确的做法是首先检查 bar 是否为 null,然后再使用 typeof:

javascript
if (bar !== null && typeof bar === "object") {  
    // bar 是一个对象  
}
数组的问题:在JavaScript中,数组实际上是特殊的对象。因此,typeof 对于数组也会返回 "object"。这通常不是问题,因为数组确实是对象,但有时你可能想要区分普通的对象和数组。在这种情况下,你可以使用 Array.isArray() 方法:

javascript
if (Array.isArray(bar)) {  
    // bar 是一个数组  
} else if (bar !== null && typeof bar === "object") {  
    // bar 是一个非数组对象  
}
其他非普通对象:除了数组,JavaScript还有其他一些内置的类型,如函数、日期、正则表达式等,它们也都是对象,但可能不是你想要检查的“普通”对象。例如,typeof function() {} 返回 "function",而不是 "object",但函数实际上是对象。类似地,日期和正则表达式也有它们自己的构造函数和类型。
包装对象:JavaScript有原始类型和对应的包装对象(如 Number、String、Boolean)。虽然 typeof 对于原始值(如字符串、数字和布尔值)会返回 "string"、"number" 或 "boolean",但如果你创建了一个包装对象(如 new Number(42)),则 typeof 会返回 "object"。通常,你不应该使用包装对象,而应该使用原始值,因为它们在JavaScript中更常用,也更高效。
综上所述,虽然 typeof bar === "object" 可以作为一个基本的检查来确定 bar 是否可能是一个对象,但在实际应用中,你可能需要更复杂的逻辑来准确地确定 bar 的类型。

可以通过Object.prototype.toString.call(bar) === "[object Object]" 来避免这种弊端:

let obj = {}; 
let arr = []; 
console.log(Object.prototype.toString.call(obj)); //[object Object] 
console.log(Object.prototype.toString.call(arr)); //[object Array] 
console.log(Object.prototype.toString.call(null)); //[object Null] 

另外,为了珍爱生命,请远离==:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

emma20080101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值