问题发现
阅读 JavaScript高级程序设计 时, 前面讲了toString()不可以转换null 或 undefined
let something;
console.log(something.toString()) // 报错
而阅读到字符串插值时, 提到插值是使用toString()函数强制转换为字符串
不禁好奇, 如果我插入一个undefined的值的变量会如何?
let num;
let something = `this is a number: ${num}`;
console.log(something);
然后我打开了浏览器控制台
阿巴, undefined?
你给我显示出来了???
搞我心态是吧?!
问题思考
下意识觉得应该是使用String()
诶遇到null了就转成"null" 遇到undefined就转换成"undefined" 多好
但想法很美好, 现实很骨感
这里应该是重写了foo的toString()方法, 我试了一下, 输出确实如此
T_T 那就难受了, 毕竟这么明显的错误, 我都给发现了, 人家这么会发现不了
那就只能查模板字符串插值的底层原理咯
试了能不能覆盖掉模板字符串的toString()方法, 不行
可能模板字符串的toString()方法是由js自己编写了的, 然后我们无法重写它 调用的时候也调用的是js自己定义的, 这个toString()可能和其他的toString()不大一样, 或者说不同数据类型的toString可能都不一样
结尾感悟
虽然最后没有得出我想要的结果, 直接输出模板字符串的toString方法现实的也是native code
但是能发现问题就是好的, 如果有大佬懂的可以留言说明详细情况, 在此感谢