Number调用toString()方法产生的问题

来源:互联网 发布:调酒刻度杯淘宝 编辑:程序博客网 时间:2024/05/19 13:10

转载地址  http://www.zuojj.com/archives/888.html


为什么会写此篇文章,其原因是前段时间有人问过我一个问题20.toString()的结果是多少?如果你是一个新手,看到这个问题,第一想到的结果应该是“20”,但是结果却和我们想的不相符,看一下几个例子:

//Outputs: "/abc/"console.log(/abc/.toString());//Outputs: "true"console.log(true.toString());//Outputs: "20.3"console.log(20.3.toString());//Outputs: Uncaught SyntaxError: Unexpected token ILLEGAL console.log(20.toString());

从上例结果可以看出Outputs3可以正常输出,Outputs4却报错。到底是何原因呢?究其原因还是“.”号的原因。当20.toString()的时候,这个“.”是不明确的,是小数点符号,还是通过“.”来调用方法即对象成员访问。因为没有20.toString这样的浮点数,所以才会报错。而20.3.toString(),第一个点被解释成浮点数的小数点,第二个点被解释成对象访问,所以没有报错。

那么我们如何来解决这个问题呢?有如下几种方式:

//方式一:console.log(20..toString());//Ouputs: 20console.log(20.);//方式二:console.log(20 .toString());//方式三:console.log((20).toString());//方式四:console.log(20["toString"]());

综合以上几种方式,
方式一:等价于20.0.toString()。
方式二:因为浮点数中数字和点之间不会有空格,所以此处不会再把这个点当成浮点数的点来解析了。
方式三:个人比较推崇。加个括号确保解析器解析时不会混淆。
方式四:看起来比较别扭。



原创粉丝点击