请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?

请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?

1 in Object(1.0).constructor; Number[1] = 123; 1 in Object(1.0).constructor;

false、true

实际上Object(1.0)就是将数字“1.0”封装成它对应的包装类的一个对象实例比如Number(1.0),所以目的是为了检测1是否在Number上。
一开始1并不在Number原型链上所以返回false,直到添加了“Number[1]”这个下标属性之后才让1处于Number的原型链上,也因此返回了true。

constructor 是构造函数属性。它是谁的属性?它是原型属性 prototype 所指向的那个对象的属性。

Object(1.0).constructor 的原型是 Number 对象。

Number 对象本身可作为构造函数,所以 Object(1.0).constructor 就是 Number 对象本身。

  1. 在浏览器控制可以看到 Object(1.0).constructor 的原型上的 constructor 属性指向的构造函数即 Number 对象 最初没有 属性 1 ;

  2. 通过 Object[key] = value; 形式给 constructor 对象添加 key = 1 属性,对应的 value = 123 ;

  3. 第二次 检测对象 constructor 时就有了属性 1 。

Object(1.0)相当于new Number(1.0),实例化了一个Number类型的对象,
这个对象的constructor,也就是Object(1.0).constructor
指向实例化这个对象的构造函数,也就是Number,
因此第一行1 in Object(1.0).constructor的意思是判断此时的Number构造函数里是否包含1这个属性,结果显然是false;
Number是构造函数,也是对象,是对象就能添加属性,第二行Number[1] = 123给Number添加了一个属性1,值为123,此时Number函数里就包含了属性1,因此第三行1 in Object(1.0).constructor结果为true.

Object(1)是把1转成包装数字对象1,它没有属性constructor,所以会去它的原型对象Number.prototype上去找所以结果是Number(){}


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17824791.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示