JavaScript中万物皆对象,为何typeof检测Object返回function?
为什么
typeof Object返回'function' JavaScript里流传的「万物皆对象」是对语言特性的粗糙简化,本身并不严谨。JS存在独立的原始值类型,数字、字符串、布尔值、null、undefined、Symbol、BigInt这些都不属于对象范畴。
你用typeof检测的Object,本身不是普通对象实例,它是JS引擎内置的构造函数,作用就是生成普通对象实例。按照typeof运算符的既定规则,检测函数类型的值时会统一返回'function',所以你看到的运行结果完全符合设计逻辑,不是异常。
可以运行下面的代码理清两者的关系:
// 检测内置Object构造函数本身的类型 console.log(typeof Object); // function // 用Object构造函数创建一个普通对象实例 const normalObj = new Object(); console.log(typeof normalObj); // object // 函数本质是特殊的对象,支持挂载自定义属性 Object.testAttr = 'demo'; console.log(Object.testAttr); // demo
补充说明:
typeof存在早期语言设计留下的历史缺陷,比如检测null时会错误返回'object',它只适合做基础类型的快速粗筛,如果要精准判断值的具体类型,更推荐使用Object.prototype.toString.call(目标值)的方案。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

