# 第一补: JS类型基础
# 1. ‘1’.toString()为什么可以调用,1.toString()却不行?
我们知道如果在代码中使用:
'1'.toString()
// 或者是
true.toString()
@前端进阶之旅: 代码已经复制到剪贴板
都是可以正常调用的,这是因为toString它是Object.prototype上的方法,任何能访问到Object原型的元素都可以调用它。
而在此处,对于'1'.toString()相当于是做了一层转换,将其转为了一个"对象",这样就可以调用toString()方法了。
也就是这样:
var s = new Object('1');
s.toString();
s = null;
@前端进阶之旅: 代码已经复制到剪贴板
- 创建
Object实例,将s变为了String{"1"}对象 - 调用
Object.prototype上的实例方法toString() - 用完之后立即销毁这个实例
这一部分三元分析的已经挺多了,我主要是想补充一下1.toString()为什么就不行。
当我们在代码中试图使用1.toString(),发现编辑器已经报错不允许我们这样做了。
最开始会有这么奇怪的想法是因为我们都忽视了一件事,那就是.它也是属于数字里的一部分啊 😂。
比如1.2、1.3。所以当你想要使用1.toString()的时候,JavaScript的解释器会把它作为数字的一部分,这样就相当于(1.)toString了,很显然这是一段错误的代码。
既然这样的话,如果我还给代码一个.是不是就可以了,于是我尝试了一下:
console.log(1.1.toString())
@前端进阶之旅: 代码已经复制到剪贴板
发现它竟然能正常打印出来:
"1.1"
@前端进阶之旅: 代码已经复制到剪贴板
这也就再次证明了1.toString()会将.归给1所属,而不是归给toString()。
当然如果你用的一个变量来承载这个数字的话也是可以的:
var num = 1;
console.log(num.toString()) // "1"
// 或者
