Javascript 为什么我不能对数字使用toString(),除非我首先将其声明为变量?

Javascript 为什么我不能对数字使用toString(),除非我首先将其声明为变量?,javascript,numbers,Javascript,Numbers,例如: var num = 5; num.toString(2); // Returns the binary representation 101 // BOTH WORK var str = 'hi'; str.toUpperCase(); // Returns 'HI'; 'hi'.toUpperCase(); // Returns 'HI'; 但如果我这样做了 5.toString(2); // Error 我认为第二个例子应该有效,因为它似乎适合字符串。例如: var num

例如:

var num = 5;
num.toString(2); // Returns the binary representation 101
// BOTH WORK

var str = 'hi';
str.toUpperCase(); // Returns 'HI';

'hi'.toUpperCase(); // Returns 'HI';
但如果我这样做了

5.toString(2); // Error
我认为第二个例子应该有效,因为它似乎适合字符串。例如:

var num = 5;
num.toString(2); // Returns the binary representation 101
// BOTH WORK

var str = 'hi';
str.toUpperCase(); // Returns 'HI';

'hi'.toUpperCase(); // Returns 'HI';

您遇到了低级语法问题。数字的标记语法包括小数点后小数部分的可能性。该语法优先于作为属性引用运算符的重载含义
。当解析器看到
5.
时,它希望看到数字的小数部分。非数字被视为错误

如果要将
用作属性引用,则必须满足标记语法,并将数字封装在某种构造中,以允许解析器以所需的方式查看

var str = (5).toString();

在这里,您的数值常量用括号括起来。括号后面的
只能是一个属性引用运算符,因此对
.toString()
的调用按预期工作。

我猜它认为
是一个小数点,并希望后面不是文本,而是另一个数字,就像
5..toString(2)一样
重复问题中给出了解释。您还可以通过在数字后留下空格来解决此问题,如以下
5.toString(2)
更多版本:
5['toString']()
5..toString()
(5).toString()
。真是太棒了。如此惊人的回答,太棒了。