number类型调用toString报错的问题,numbertostring
number类型调用toString报错的问题,numbertostring
为什么1.toString()会报错,Number(1).tostring()就不报错?Number(1)返回的也是number类型的1
首先参考了http://www.zuojj.com/archives/888.html关于number.toString()报错和不报错的解释,在此做个总结,如有补充和指正,欢迎留言。
js中的点有两种,小数点和访问对象属性的点。如果一个表达式中有两个以上的点,那么第二个以及后面的点会被js引擎当做是访问对象属性的点。如'abc'.toString().slice(1).indexOf('c') 。而第一个点就有两种情况了,有可能是小数点,也可能是访问对象属性的点。js引擎在解读以数字开头的第一个点时,有自己的一套方法去判断这个点是属于哪一种,然后再校验点后面的写法是否符合规范。
1.toString() // Uncaught SyntaxError: Invalid or unexpected token 。此处是语法错误,并非引用错误。也就是说这种写法,这个点会被js引擎当做小数点,'toString()' 会被作为一个不合法的浮点数来解释,类似于 1.hello , 1.你好 都是此类语法错误。
1.2.toString() // "1.2" 。返回1.2,第一个点被认为是小数点,第二个点被认为是用于访问属性的点,可以调用。
1 .toString() // "1" 。1后有空格,小数点前后不会有空格,所以这个点会被作为调用属性的点。
1..toString() // "1" 。 1后面两个点,第二个点是访问属性,前面的1., 会被当做1.0
1['toString']() //"1" 。采用中括号来访问属性,也不会报错。
再看上面的问题,我是这么理解的,Number(1).toString(),是对一个函数的返回值调用toString(),这个点当然会被js引擎当做访问属性的点,然后在对Number(1)的返回值number 1调用toString()方法,这个点没有被当做小数点。而1.toString()的点直接就被当做小数点了,所以会报错。
相关文章
- 暂无相关文章
用户点评