我正在阅读Douglas Crockford的 JavaScript: The Good Parts ,我正处于定义淡入淡出功能的位置。部分代码归结为:
var level = 1;
var hex = level.toString(16);
所以我在浏览器的控制台中运行它,看看我得到了什么......
var level = 1;
level.toString(16);
嘿,它返回“1
”...... Fabuloso! WUNDERBAR!
然后为了厚颜无耻,我试着看看我得到了什么...
1.toString(16);
我得到了
什么是什么?如果SyntaxError:意外的标记ILLEGAL
level
是一个等于1的变量,并且在该级别上运行此方法工作正常,那么为什么不在实际的数字1上运行此方法呢?我尝试使用toPrecision()
方法进行类似的实验,并且在两种情况下都能正常工作。这是什么问题?这是JavaScript实现中的另一个固有缺陷,还是我错过了什么?我正在Google Chrome中进行测试。
相关:Stack Overflow问题 Why don't number literals have access to Number methods? 。
答案 0 :(得分:18)
这只是一种语言语法限制。
由于1.
是合法的字面数字(并且1.t
不是),因此令牌系统会将其拆分为以下标记:
1.
toString
(
)
这是一个非法的令牌序列。它是object method
,而不是object . method
。
在@Joey的答案中的工作版本中,大括号会阻止标记生成器将点视为数字文字的一部分而不是单独的标记,写作也是如此:
1.0.toString()
或
1..toString()
因为tokenizer知道第二个点必须自己是一个令牌,而不是数字文字的一部分。
答案 1 :(得分:3)
您需要1..toString或(1).toString来获取数字文字
答案 2 :(得分:-2)
level是一个变量(因此也是一个对象)。
1是文字。它们不是对象,翻译人员对它们的看法完全不同。
http://www.cs.brown.edu/courses/bridge/1998/res/javascript/javascript-tutorial.html#4