0x000000 作为 JavaScript 中的值在语法上如何有效?

How is 0x000000 syntactically valid as a value in JavaScript?

我正在学习 THREE.js,在指定对象的颜色时,您使用 0x 并在末尾使用十六进制值。这是什么意思?

它们是有效的变量名吗?

它们是如何工作的?

我以为以数字开头的东西不能是变量?

是的,您可以使用十六进制表示值文字。 来自 MDN - Numeric Literal:

Hexadecimal

Hexadecimal number syntax uses a leading zero followed by a lowercase or uppercase Latin letter "X" (0x or 0X). If the digits after 0x are outside the range (0123456789ABCDEF), the following SyntaxError is thrown: "Identifier starts immediately after numeric literal".

0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10     

您还可以在这里找到语法:http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.3
(有趣的是这里不包括八进制文字,因为它们没有在 Strict Mode. The grammar is specified under B.1.1 中使用)

Are they valid variable names?

没有。它们是整数(数字)文字。你可以写 0 而不是 0x000000,你可以写 16.

而不是 0x10

每种颜色都是一个值(不是变量),所以:

黑色为0,十六进制表示为0x000000。

0x with a hex value on the end. What does this mean?

这些意味着他们是hexadecimal numbers.

Are they valid variable names?

哪些?如果您说的是 0X 那么它们是十六进制的,否则请指定

这是 javascript 继承自 C 甚至更早的东西。

普通的数字十进制常量如下所示:

x = 42

在过去(甚至现在在某些情况下)能够以八进制形式指定常量是很有用的;额外的前导 0 表示:

x = 052  /* 42 */

当十六进制常量开始成为有用的东西时,它们被强加为具有前导 0x(这在以前是语法错误):

x = 0x2a /* 42 */

和更新版本的 javascript 现在支持二进制常量 (0b) 和更明确的八进制常量 (0o):

x = 0b101010 /* 42 */
x = 0o52 /* 42 */

None 这些形式是有效的变量名称。