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]吗?


...全文
513 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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。

87,997

社区成员

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

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