沧州工商联网站建设电子商务网站建设题目
2026/4/7 4:56:16 网站建设 项目流程
沧州工商联网站建设,电子商务网站建设题目,江西 网站制作,金沙网站怎么做代理在学习 JavaScript 的过程中#xff0c;你是否曾被以下现象困惑过#xff1f;typeof Object; // function typeof {}; // object明明 Object 是“对象”的代表#xff0c;为什么它自己却是个函数#xff1f; 而 {} 才是我们日常使用的“对…在学习 JavaScript 的过程中你是否曾被以下现象困惑过typeof Object; // function typeof {}; // object明明Object是“对象”的代表为什么它自己却是个函数而{}才是我们日常使用的“对象”却被识别为object更令人费解的是Object和Function之间还存在一种看似“循环引用”的原型关系Object.__proto__ Function.prototype; // true Function.__proto__ Function.prototype; // true本文将带你彻底理清这两个问题背后的机制揭开 JavaScript 原型系统的神秘面纱。一、先回答为什么typeof Object≠typeof {}✅ 核心原因它们根本不是同一类东西表达式实际类型说明Object内置构造函数函数可调用Object()或new Object(){}普通对象字面量不可调用是Object的实例根据 ECMAScript 规范typeof对可调用对象即具有[[Call]]内部方法的对象返回function否则返回object。所以Object是一个函数→typeof Object function{}是一个普通对象→typeof {} object 类比理解Object是“造车的工厂”函数{}是“工厂生产出来的一辆车”对象二、深入Object和Function的原型关系要理解上述现象必须搞懂 JavaScript 中最核心的两个内置对象Object和Function。1. 基本事实所有函数包括Object、Array、Date都是Function的实例。所有普通对象包括{}、[]、Function.prototype最终都继承自Object.prototype。因此Object instanceof Function; // true Function instanceof Function; // true ({}).__proto__ Object.prototype; // true2. 它们的__proto__指向哪里表达式值说明Object.__proto__Function.prototypeObject是函数由Function构造Function.__proto__Function.prototypeFunction自身也是函数Function.prototype.__proto__Object.prototypeFunction.prototype是普通对象Object.prototype.__proto__null原型链终点3. 原型关系图文字版Function ──.__proto__──→ Function.prototype ──.__proto__──→ Object.prototype ──.__proto__──→ null ↑ │ (instanceof) Object ──.__proto__───────────────────────────────────────┘ 这看起来像“鸡生蛋、蛋生鸡”但实际上是 JS 引擎在初始化时预定义好的闭环结构。三、验证代码建议在控制台运行// 1. typeof 差异 console.log(typeof Object); // function console.log(typeof {}); // object // 2. instanceof 验证 console.log(Object instanceof Function); // true console.log(Function instanceof Function); // true // 3. __proto__ 关系 console.log(Object.__proto__ Function.prototype); // true console.log(Function.__proto__ Function.prototype); // true // 4. Function.prototype 是普通对象 console.log(typeof Function.prototype); // object console.log(Function.prototype.__proto__ Object.prototype); // true // 5. Object.prototype 是原型链顶端 console.log(Object.prototype.__proto__ null); // true四、常见误区澄清误区1Object是最顶层对象所以Object.__proto__应该是null✅ 正解Object是函数不是普通对象。所有函数的__proto__都指向Function.prototype。误区2Function.prototype是一个函数✅ 正解typeof Function.prototype返回object它是一个内置的普通对象仅用于被函数实例继承。误区3{}和Object是等价的所以 typeof 应该一样✅ 正解{}是Object的实例就像new Array()和Array的关系一样——构造函数 vs 实例。五、延伸如何正确判断类型由于typeof对对象一律返回object连null也是我们常使用Object.prototype.toString.call(value).slice(8, -1)例如Object.prototype.toString.call([]) // [object Array] Object.prototype.toString.call(new Date()) // [object Date] Object.prototype.toString.call(/regex/) // [object RegExp] Object.prototype.toString.call(null) // [object Null] Object.prototype.toString.call(undefined) // [object Undefined] Object.prototype.toString.call(123) // [object Number] Object.prototype.toString.call(str) // [object String] Object.prototype.toString.call(true) // [object Boolean] Object.prototype.toString.call(Symbol()) // [object Symbol] Object.prototype.toString.call(() {}) // [object Function] Object.prototype.toString.call({}) // [object Object]这正是利用了Object.prototype.toString能返回内部[[Class]]标签的特性。六、总结问题答案为什么typeof Object是function因为Object是一个可调用的构造函数为什么typeof {}是object因为{}是一个普通对象实例Object.__proto__指向哪Function.prototypeFunction.__proto__指向哪Function.prototype原型链终点是Object.prototype.__proto__ null记住函数也是对象但可调用 →typeof返回functionObject是“模具”{}是“产品”整个原型系统由Object和Function共同构建参考资料ECMAScript® 2024 Language SpecificationMDN:typeof

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询