1.toFxied(2)的结果是什么?

189 阅读1分钟

导读

很多使用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"