在JavaScript中使用toString

Bob*_*ian 17 javascript

我正在阅读Douglas Crockford的JavaScript:The Good Parts,我正处于定义淡入淡出功能的地步.部分代码归结为:

var level = 1;
var hex = level.toString(16);
Run Code Online (Sandbox Code Playgroud)

所以我在浏览器的控制台中运行它以查看我得到的内容....

var level = 1;
level.toString(16);
Run Code Online (Sandbox Code Playgroud)

嘿,它返回" 1"...... Fabuloso!Wunderbar酒吧!

然后,为了厚颜无耻,我试着看看我得到了什么......

1.toString(16);
Run Code Online (Sandbox Code Playgroud)

我明白了

SyntaxError:意外的标记ILLEGAL

什么是什么?如果level变量等于1,并且在该级别上运行此方法工作正常,那么为什么不在实际的数字1上运行此方法呢?我尝试了一种与该toPrecision()方法类似的实验,并且在两种情况下均可正常工作.这是什么问题?这是JavaScript实现中的另一个固有缺陷,还是我错过了什么?我正在Google Chrome中测试.

相关:Stack Overflow问题为什么数字文字不能访问Number方法?.

Aln*_*tak 19

这只是一种语言语法限制.

由于1.是合法的文字数字(并且1.t不是),因此标记器会将其拆分为以下标记:

1.
toString
(
)
Run Code Online (Sandbox Code Playgroud)

这是一个非法的令牌序列.它是object method,而不是object . method.

在@ Joey的答案中的工作版本中,大括号会阻止标记生成器将点作为数字文字的一部分而不是作为单独的标记处理,写作:

1.0.toString()
Run Code Online (Sandbox Code Playgroud)

要么

1..toString()
Run Code Online (Sandbox Code Playgroud)

因为tokenizer知道第二个点必须是一个令牌,而不是数字文字的一部分.