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

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

时间:2023-11-10 18:33:53浏览次数:37  
标签:1.0 对象 请问 Object Number constructor 属性

请问以下两次检测对象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(){}

标签:1.0,对象,请问,Object,Number,constructor,属性
From: https://www.cnblogs.com/longmo666/p/17824791.html

相关文章

  • 请问以下JS代码在Node环境下的输出顺序是?
    请问以下JS代码在Node环境下的输出顺序是?Promise.resolve().then(()=>{console.log('p1');}).then(()=>{console.log('p2');})process.nextTick(()=>{console.log('n1');process.nextTick(()=>{console.log('......
  • 关于Lambda表达式(箭头函数)的get属性访问器和常规的get属性访问器的差异
    如下代码示例所示d1d2相等,d3d4不等,因为赋值形式的访问器只是new一个实例后赋值,而lambda形式(箭头函数),则是把箭头右侧是当方法体来执行,即每次都new一个新的实例classDog{publicDog(){this.Name=Guid.NewGuid().ToString("N");......
  • 11月10日overflow属性以及圆形头像的制作
    目录overflow属性什么是overflow属性overflow属性的值使用hidden属性值解决使用属性值scroll解决属性值为auto的情况利用这个属性制作一个圆形头像overflow属性什么是overflow属性overflow是溢出的意思,给属性规定当内容溢出元素框是发生的事情,就是我规定的框无法完全将内容包含......
  • 请问以下JS代码的输出是? 935、 ['read', 'write']
    functionfather(){this.num=935;this.work=['read','write','listen'];}functionson(){}son.prototype=newfather();letson1=newson();letson2=newson();son1.num=117;son1.work.pop();console.log(son2.......
  • 多模块springboot项目打jar包 没有主清单属性
    说明:一个多模块的项目 两个子Module 一个core 一个server。java8的环境 |--XChome(pom.xmlxchome的 父级)--|--xc-core(pom.xmlxc-core的子级)--|--xc-server(pom.xmlxc-server的子级) xc-core:主要定义一些常量类、工具类、业务部分(controllerservice......
  • 11月10日css盒子模型的margin和padding属性
    目录css盒子模型margin属性如何用margin来控制其上下左右的距离margin的缩写padding属性首先它如何进行上右下左的移动现在我有一个需求就是将内容在边框的正中央显示然后就是简写的方式css盒子模型有四个属性属性描述margin用于控制元素与元素之间的距离;margin的最......
  • ts symbol 作为属性名
    在TypeScript中,如果你希望在一个对象中使用某个symbol作为属性名,你必须使用中括号[]括起来,并在括号中放入该symbol。  这是因为当你使用symbol作为属性名时,它不是一个字符串,而是一个symbol类型的变量。  因此,正确的写法是[RawSymbol]:'somevalue',这样可以......
  • 11月9日display属性
    目录display属性display属性值为nonedisplay属性值为blockdisplay属性值为inlinedisplay属性值为inline-block了解知识display属性该属性是用于控制HTML元素的显示效果值意义display:"none"HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用......
  • 静态属性、静态
      ......
  • 11月9日背景属性
    目录背景属性背景颜色以及背景图片的添加背景颜色就是常用的background-color这个属性这就不多讲了。背景图片的添加背景图片的选择background-repeat属性值为repeatbackground-repeat属性值为repeat-xbackground-repeat属性值为repeat-ybackground-repeat属性值为no-repeat背景图......