Javascript:解析负数(十六进制|二进制)

Dav*_*ues 5 javascript numbers

它适用于很多数字类型,但不适用于负数十六进制或二进制。同样,Number(octal)不解析八进制数。

Number("15")    ===   15;  // OK
Number("-15")   ===  -15;  // OK
Number("0x10")  ===   16;  // OK
Number("0b10")  ===    2;  // OK
Number("-0x10") ===  NaN;  // FAIL (expect  -16)
Number("-0b10") ===  NaN;  // FAIL (expect   -2)
Number("0777")  ===  777;  // FAIL (expect  511)
Number("-0777") === -777;  // FAIL (expect -511)
Run Code Online (Sandbox Code Playgroud)

问题:如何正确解析所有有效的 Javascript 数字?

编辑A

parseInt()不要帮助我,因为我需要检查每种可能性(例如,如果从0x我使用开始)。16

编辑B

如果我在 Chrome 控制台上写入,0777它会变成511,并且也允许负值。如果我直接写入 JavaScript 代码,甚至可以工作。所以我基本上期望一个像 javascript 解析器一样工作的解析器。但我认为负十六进制,例如, on 确实在0 - Number(hex)解析器中,而不是字面上的Number(-hex)。但八进制值没有意义。

小智 0

它不会解析八进制和其他示例,因为它们不是有效的 Javascript 数字,至少在Number. 所以技术上正确的答案是:使用Number

如果你想解析其他格式,那么你可以使用parseInt,但你必须提供基础。

  • *“因为它们不是有效的 Javascript 数字”*:为什么 `-0x10` 不是有效数字? (4认同)
  • 如果您参考将字符串转换为数字的算法(与“Number”函数不同!)(http://www.ecma-international.org/ecma-262/5.1/#sec-9.3.1),那我同意了。当我说“有效数字”时,我指的是 JavaScript 中的数字。所以,是的,“π²”不是一个有效的数字,但“-0x10”是:“console.log(-0x10);”(尽管从技术上讲,“0x10”是数字“-”是一元减运算符)。重点是这个字符序列在JS源码中是有效的。 (2认同)