alert(obj)输出[object Object]里的大写Object是什么意思?

FnaticE 2021-04-27 11:12:50
假设obj就是let obj={}声明出来的,我目前的理解是Object是obj的constructor,那alert(obj)出来的都是[object, 'constructor']这样的形式?
但是这又怎么解释:
function Foo(){};
let f1=new Foo();
alert(f1); //还是[object Object], 可是f1的construtor明明是Foo,不应该是[object Foo]吗?


...全文
611 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2021-04-28
  • 打赏
  • 举报
回复 1
引用 2 楼 FnaticE 的回复:
[quote=引用 1 楼 weixin_37226778 的回复:]alert调用的是对象的toString方法,toString()返回 "[object type]",其中type是对象的类型。 可以用typeof f1来查看f1的type。
对象的类型。。岂不还是对象Object?是不是可以理解为alert('任意对象')都是[object Object]?[/quote] 差不多就1楼的朋友说的那样子 你可以去找找看实例化时,new关键字都做了些什么,你大概就知道了。 大概的流程是创建对象,获取构造函数,链接原型,注入上下文作用域(this),返回。 所以,实例化对象f1和Foo,原本就不是完全相同的一个东西。再说了,1楼朋友说的一样,你这调用的是.toString()。你如果alert(Foo),打印出来的内容就是Foo的toString()后内容 或者简单粗暴点,你alert(JSON.stringify(f1)),你看看它到底是什么 是不是可以理解为alert('任意对象')都是[object Object]??? 这个需要问吗?你alert(1),alert('aaa')难道出来的是一样的东西??? 至于你说的都是object就没有意义了。那我怎么分辨这个对象具体是正则,是日期,数组,数字,字符串,布尔,Set,Map……等等中的哪一种呢?它们私有的属性和方法咋办?全挂在object上?来一锅大杂烩,还谈什么面象对象呢? 你最近发的贴老是在纠结这些东西。想知其所以然,诚然是好的。可方法不对,只会适得其反。而且有些知识的“其所以然”到最后就是一句话,一句让你记住就可以的话,它就是知识点。你再要深究就到最最底层去了。比如{}它为什么是{},为什么它上面可以加属性和方法?这些东西,你现在了解了他的意义在哪里呢? 所以,建议你先系统的将所有基础过一遍(看+练习),先记住其中的知识点。以后实际应用中,碰上你觉得莫名其妙的问题的时候,那个时候才是你需要去深究“为什么”的时候。 最后,给段代码,辅助你理解一下:调试尽量用console.log打印,不用alert

function Foo() {}
      function Foo() {}
      const f1 = new Foo()

      console.log("f1:" + f1)
      console.log("Foo:" + Foo)
      console.log("Foo type:" + Object.prototype.toString.call(Foo).match(/^\[object\s(.*)\]$/)[1])
      console.log('============================================================')

      
      function Bar() {}
      const f2 = new Bar()

      Bar.toString = function() {
        return "我是Bar"
      }
      f2.toString = function() {
        return "我是 f2"
      }

      console.log("f2:" + f2)
      console.log("Bar:" + Bar)
      console.log("Bar type:" + Object.prototype.toString.call(Bar).match(/^\[object\s(.*)\]$/)[1])
jio可 2021-04-28
  • 打赏
  • 举报
回复
建议去看看Object.prototype.toString
Stephen_112 2021-04-28
  • 打赏
  • 举报
回复
用console.log来调试
FnaticE 2021-04-28
  • 打赏
  • 举报
回复
引用 2 楼 FnaticE 的回复:
[quote=引用 1 楼 weixin_37226778 的回复:]alert调用的是对象的toString方法,toString()返回 "[object type]",其中type是对象的类型。 可以用typeof f1来查看f1的type。
对象的类型。。岂不还是对象Object?是不是可以理解为alert('任意对象')都是[object Object]?[/quote] 这样的话,有啥意义,反正啥都是[object Object],因为JS里一切皆对象啊。
FnaticE 2021-04-28
  • 打赏
  • 举报
回复
引用 1 楼 weixin_37226778 的回复:
alert调用的是对象的toString方法,toString()返回 "[object type]",其中type是对象的类型。 可以用typeof f1来查看f1的type。
对象的类型。。岂不还是对象Object?是不是可以理解为alert('任意对象')都是[object Object]?
weixin_37226778 2021-04-28
  • 打赏
  • 举报
回复
alert调用的是对象的toString方法,toString()返回 "[object type]",其中type是对象的类型。 可以用typeof f1来查看f1的type。
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧