首页 > 试题广场 >

请问以下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)
主要有以下三点:
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)