Number调用toString()方法产生的问题,numbertostring
分享于 点击 1458 次 点评:73
Number调用toString()方法产生的问题,numbertostring
转载地址 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: 20
console.log(20.);
//方式二:
console.log(20 .toString());
//方式三:
console.log((20).toString());
//方式四:
console.log(20["toString"]());
综合以上几种方式,
方式一:等价于20.0.toString()。
方式二:因为浮点数中数字和点之间不会有空格,所以此处不会再把这个点当成浮点数的点来解析了。
方式三:个人比较推崇。加个括号确保解析器解析时不会混淆。
方式四:看起来比较别扭。
相关文章
- 暂无相关文章
用户点评