JavaScript中各类内置构造函数的prototype原型的类型是什么
首先要明确:typeof 运算符的设计本身就会对所有普通对象(以及 null)返回 "object",只有函数类型会单独返回 "function",所以无法通过 typeof 判断这些原型的具体类型,要准确识别需要调用 Object.prototype.toString.call() 读取对象内部的 [[Class]] 标记。
你提到的所有内置原型本质上都属于 Object 的实例,同时各自对应特定的内置类型,具体属性如下:
Object.prototype:Object.prototype.toString.call(Object.prototype)返回"[object Object]",是JS原型链的最顶端,没有上层原型,属于普通对象实例。Boolean.prototype:检测返回"[object Boolean]",是特殊的布尔类型实例,默认存储的原始值为false,调用Boolean.prototype.valueOf()可拿到该默认值。Number.prototype:检测返回"[object Number]",是特殊的数字类型实例,默认存储的原始值为0。String.prototype:检测返回"[object String]",是特殊的字符串类型实例,默认存储的原始值为空字符串""。Date.prototype:检测返回"[object Date]",是特殊的日期类型实例,未绑定具体时间戳,调用其valueOf()会返回无效日期。RegExp.prototype:检测返回"[object RegExp]",是特殊的正则类型实例,默认对应空正则/(?:)/。Array.prototype:检测返回"[object Array]",是特殊的数组类型实例,本身就是长度为0的空数组。Set.prototype:检测返回"[object Set]",是特殊的Set集合类型实例,本身是空集合结构。Map.prototype:检测返回"[object Map]",是特殊的Map字典类型实例,本身是空字典结构。Function.prototype:这里需要注意,标准中typeof Function.prototype会返回"function",它本身是一个无操作的空函数,检测返回"[object Function]",属于特殊的函数类型实例。
所有非 Object.prototype 的内置原型的原型链最终都会指向 Object.prototype,所以它们都属于 Object 的子类实例,和普通对象的区别仅在于内部有对应类型的专属标记和内置方法。
内容的提问来源于stack exchange,提问作者Aliuk
相关产品推荐
相关产品推荐

