Javascript中数字后面加一点(如10.)再调用方法的神奇现象

查看:119
本文介绍了Javascript中数字后面加一点(如10.)再调用方法的神奇现象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

今天尝试直接用数字调用 Number 对象的方法,发现以下这个神奇的现象,望有知其所以然者多多指教。

以下测试均用 toString() 方法为例,测试环境为Chrome 58.0.3029.110 (64-bit)

0x01 直接用数字调用 toString()

document.write(10.toString());

此举显然行不通,并报以下错误:

Uncaught SyntaxError: Invalid or unexpected token

0x02 先在数字后加一点(.),再调用 toString()

document.write(10..toString());

加了一点后,可以正常输出了。

0x03 改用八进制和十六进制试试,仍保留数字后的一点(.)

document.write(010..toString());
document.write(0x10..toString());

神奇的是,改为八进制或十六进制后,又出现了报错:

Uncaught SyntaxError: Unexpected token .

0x04 依然用八进制和十六进制,但把数字后的一点(.)去掉

document.write(010.toString());
document.write(0x10.toString());

把一点去掉后,又可以正常输出了。

0x05 结论

在八进制和十六进制下,数字后不需加点就可直接调用 Number 对象的方法;而在十进制下,需要在数字后加上一点才能调用 Number 对象的方法。小弟只能观察到 Javascript 中数字调用方法这一神奇的特性,却不知其所以然,希望有知道其原理与知识点的同学多多指教。

解决方案

spec: http://www.ecma-international...

因为ECMAScript中, 数值字面量Numeric Literals包含四种:

DecimalLiteral
BinaryIntegerLiteral
OctalIntegerLiteral
HexIntegerLiteral

除了DecimalLiteral以外, 其它三种都是整数, 对于第一种,结尾的.是可选的, 其它的都不能有., 也就是说0., 0x1, 0b1, 0o1都是是合法的, 但是0x1.f, 0b1.2都是不合法的.

这篇关于Javascript中数字后面加一点(如10.)再调用方法的神奇现象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆