导读
很多使用JS的小伙伴们会发现,JS里的最常用的一个符号就是点号.
了。如下
"121".replace() //点出方法
book.name //点出属性
6.24 //小数点
但大家有没有想过:js引擎如何识别这个点号[.]的呢
?
解析为属性或者方法
如果是字符串或者对象值直接使用[.],那么JS引擎就会直接将其从其原型中(JS的字面量在解析时也会转为对应的构造器包裹以调用原型方法)找到属性或者方法。
如:
"aa".replace("a","b1") // String("aa").replace("a","b1")
const obj = {name:"zerotower",age:23};
obj.name //"zerotower"
解析为小数点
如果是数字,那么JS引擎将直接解析为小数点。
1.89 // 1.89
1. //1.0
2.001 // 2.001
面试题
知道了JS的解析过程,下面就是一道针对该点出的面试题了。
1.toFixed(1) //error
Number(1).toFix() // "1.0"
1是数字,紧跟其后的[.]被解析为小数点;NumBer(1)是一个对象,其后的[.]被解析为取属性(方法),自然就不会报错了。
如果是两个点的情况呢?
1..toFixed(2)
首先,第一个[.]仍然被解析为小数点,1.的结果其实就是1.0;第二个[.]不会再被解析为小数点,实际为(1.0).toFixed(2)
。结果为"1.00"