为什么我不能在 Number 上使用 toString() 除非我先将它声明为变量?

Why can I not use toString() on a Number unless I declare it as a variable first?

例如:

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

但如果我这样做

5.toString(2); // Error

我认为第二个示例应该可以工作,因为它似乎适用于字符串。例如:

// BOTH WORK

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

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

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

如果您想将 . 用作 属性 引用,您必须满足标记语法并将数字封装在允许解析器看到 . 你想要的方式:

var str = (5).toString();

在那里,您的数字常量被括在括号中。括号后的 . 可以是 属性 引用运算符,因此对 .toString() 的调用按预期工作。