首页 > 试题广场 >

请问以下JS代码输出结果是什么? console.log(t

[单选题]
请问以下JS代码输出结果是什么?
console.log(typeof ''.prototype);
console.log(typeof ''.__proto__); 
console.log(typeof ''.__proto__ === typeof ''.prototype); 


  • object、object、true
  • undefined、undefined、true
  • undefined、object、false
  • object、undefined、false
针对本题,咱们先理解 prototype和__proto__ 的关系。
主要有以下三点:
1)函数(或构造函数)身上才有 prototype (prototype名字叫原型,原型是一个对象)
2)而其他任何通过构造函数实例化出来的对象(不包括null、undefined)身上都有 __proto__(__proto__是隐式原型,隐式原型也一个对象)
3)实例化对象的__proto__ 就是 构造函数的 prototype   (===关系)
附:undefind 和 null 既没有prototype也没有 __proto__  ,因为它俩不是函数,也不是函数实例化出来的对象


具体说明如下:
1)函数(或构造函数)身上才有 prototype (prototype名字叫原型,原型是一个对象)
例如:String、Number、Boolean、Array、Object


2)而其他任何通过构造函数实例化出来的对象(不包括null、undefined)身上都有 __proto____proto__是隐式原型,隐式原型也一个对象)
例如: 'a' 是通过String函数实例化出来的对象(这里包括以下说的对象不是Objcet数据类型)
            4 是通过Number函数实例化出来的对象
            true是通过Boolean函数实例化出来的对象
            [1,2,3]是通过Array函数实例化出来的对象
            {}是通过Objec函数实例化出来的对象



3)实例化对象的__proto__ 就是 构造函数的 prototype
例如:'a'.__proto__ === String.protptype            //true
           true.__proto__  ===  Boolean.prototype   //true 





发表于 2022-01-13 14:34:39 回复(19)
这里写一下个人的见解:

首先我们要知道typeof ''的运算结果是 ’string'. prototype显示原型是只有function类型才有的,因此'string'.prototype为undefined.而'string'._proto_指向string的原型,因此string._proto_为object
发表于 2021-12-21 11:15:05 回复(2)
这里考察原型,js原型遵循5个规则: 1、所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性; 2、所有的引用类型(数组、对象、函数),都有一个__proto__(隐式原型)属性,属性值是一个普通的对象; 3、所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通对象; 4、所有的引用类型(数组、对象、函数),__proto__属性值指向(完全相等)它的构造函数的“prototype”属性值; 5、当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去__proto__(即它的构造函数的prototype中)寻找。
发表于 2021-12-12 19:56:21 回复(2)
构造函数String才有prototype, 而' '是String的实例对象,只有__proto__。 String.prototype === ' '.__proto__
发表于 2022-08-28 15:44:22 回复(0)
虽然说js的原型链是鸡肋,但想搞清楚建议自己看完红宝书的相关章节,不然都看一点别人的解释  西看一点会很乱
发表于 2022-01-06 11:10:17 回复(0)
这题不光考prototype跟__proto__的区别,还考了操作符优先级,本题中先操作了a.b, 再操作 typeof a.b
发表于 2022-01-17 21:10:08 回复(0)
" ''.prototype  时,JavaScript 引擎不会将字符串自动转换为一个函数对象来提供  prototype  属性,所以undefined " ''.__proto__  时,JavaScript 会自动将基本数据类型的字符串( ''  ")包装成一个  String  对象(这是一种临时的包装对象机制)。因为  __proto__  是用于访问对象原型的属性,JavaScript 引擎为了让基本数据类型也能像对象一样访问其原型上的方法和属性
发表于 2025-03-10 17:22:15 回复(0)
题目考察的是 **JavaScript 的原型链** 以及 `typeof` 运算符的使用,正确答案是 **C(undefined, object, false)**。以下是详细解析: --- ### **代码分析** ```javascript console.log(typeof ''.prototype); console.log(typeof ''.__proto__); console.log(typeof ''.__proto__ === typeof ''.prototype); ``` --- #### **第一行:`typeof ''.prototype`** - **解析**: 1. `''` 是一个字符串的字面量,属于 `String` 类型。 2. 原型属性 `prototype` 仅存在于**函数对象**上,用于定义其实例的原型。 3. 字符串 `''` 本身不是函数对象,因此它没有 `prototype` 属性。 4. 访问 `''.prototype` 的结果是 `undefined`。 - **结果**:`typeof ''.prototype` 返回 **`undefined`**。 --- #### **第二行:`typeof ''.__proto__`** - **解析**: 1. 在 JavaScript 中,所有对象都有一个 `__proto__` 属性,指向其构造函数的原型。 2. `''` 是一个字符串字面量,它的 `__proto__` 指向 `String.prototype`。 3. `String.prototype` 是一个对象。 4. 对象的类型是 `object`。 - **结果**:`typeof ''.__proto__` 返回 **`object`**。 --- #### **第三行:`typeof ''.__proto__ === typeof ''.prototype`** - **解析**: 1. 通过前两行分析得出: - `typeof ''.__proto__` 的值是 `'object'`。 - `typeof ''.prototype` 的值是 `'undefined'`。 2. 比较 `'object' === 'undefined'`,结果为 **`false`**。 - **结果**:返回 **`false`**。 --- ### **总结** 1. **第一行输出**:`undefined` (因为字符串字面量没有 `prototype` 属性)。 2. **第二行输出**:`object` (因为字符串的 `__proto__` 指向 `String.prototype`)。 3. **第三行输出**:`false` (因为 `'object' !== 'undefined'`)。 --- ### **正确答案** **C(undefined, object, false)**
发表于 2024-12-20 12:30:53 回复(0)
主要有以下三点:
1)函数(或构造函数)身上才有 prototype (prototype名字叫原型,原型是一个对象)
2)而其他任何通过构造函数实例化出来的对象(不包括null、undefined)身上都有 __proto__(__proto__是隐式原型,隐式原型也一个对象)
3)实例化对象的__proto__ 就是 构造函数的 prototype   (===关系)
附:undefind 和 null 既没有prototype也没有 __proto__  ,因为它俩不是函数,也不是函数实例化出来的对象

发表于 2022-07-20 13:44:29 回复(0)
第三个相当于判断 object===undefined 那结果肯定就是 false了
发表于 2022-04-05 16:49:19 回复(0)

为什么我输出的是undefined、undefined、true,就解答
发表于 2022-03-30 22:11:59 回复(1)