字符串插值使用toString()强制转换问题

600 阅读1分钟

问题发现

阅读 JavaScript高级程序设计 时, 前面讲了toString()不可以转换null 或 undefined

let something;
console.log(something.toString())   // 报错

image.png

而阅读到字符串插值时, 提到插值是使用toString()函数强制转换为字符串

image.png

不禁好奇, 如果我插入一个undefined的值的变量会如何?

let num;
let something = `this is a number: ${num}`;
console.log(something);

然后我打开了浏览器控制台 image.png

阿巴, undefined?

你给我显示出来了???

搞我心态是吧?!

问题思考

下意识觉得应该是使用String()

诶遇到null了就转成"null" 遇到undefined就转换成"undefined" 多好

但想法很美好, 现实很骨感

image.png

这里应该是重写了foo的toString()方法, 我试了一下, 输出确实如此

T_T 那就难受了, 毕竟这么明显的错误, 我都给发现了, 人家这么会发现不了

那就只能查模板字符串插值的底层原理咯

试了能不能覆盖掉模板字符串的toString()方法, 不行

可能模板字符串的toString()方法是由js自己编写了的, 然后我们无法重写它 调用的时候也调用的是js自己定义的, 这个toString()可能和其他的toString()不大一样, 或者说不同数据类型的toString可能都不一样

结尾感悟

虽然最后没有得出我想要的结果, 直接输出模板字符串的toString方法现实的也是native code

但是能发现问题就是好的, 如果有大佬懂的可以留言说明详细情况, 在此感谢