weixin_53650092 2021-11-23 10:55 采纳率: 72.7%
浏览 35

JavaScript中将表达式转换为字符串时会调用toString()方法,没看明白

书上写的JavaScript中将表达式转换为字符串时会调用toString()方法,我没看明白,就自己试了下,这四个例子的输出结果我没看懂,请问可以解惑一下吗,toString,tostring结果差这么多吗?不都是对象里面的键吗?感觉怎么和内置的toString()起了关联?
let foo={toString:()=>'World'};
console.log(Hello, ${foo});
执行结果是Hello,World

let foo={tostring:()=>'World'};
console.log(Hello, ${foo});
执行结果是Hello,[object Object]

let foo={tostring:‘World’};
console.log(Hello, ${foo});
执行结果是Hello,[object Object]

let foo={toString:‘World’};
console.log(Hello, ${foo});
执行结果是报错 Uncaught TypeError: Cannot convert object to primitive value

console.log里面有反引号,好像被系统给弄了看不见了。

  • 写回答

1条回答 默认 最新

  • 期许阿 2021-11-23 12:00
    关注

    你的猜测没错,原型、原型链应该要去了解一下,对象的顶层Object 而Object的prototype原型对象有个内置toString方法 而你在定义对象时手动添加了toString方法则会屏蔽掉原型上的toString方法
    不知道你有没有听过有一种方法判断引用类型 就是使用Object.prototype.toString.call 可以区分各种类型

    Object.prototype.toString.call([]) // "[object Array]"
    
    Object.prototype.toString.call({}) // "[object Object]"
    Object.prototype.toString.call(function(){}) // "[object Function]"
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器