为什么0.-5评估为-5?

时间:2019-02-25 03:46:21

标签: javascript numbers

假设我以意外的方式将0.5写为0.-5,但是它仍然可以运行。 0.中的0.-5会做什么,以便它仍然可以运行并评估为-5?

我还尝试了{-4},它打印了-4,JavaScript会忽略alert(0.-5+1)中的0.吗?

5 个答案:

答案 0 :(得分:161)

.之后的尾随数字是可选的:

console.log(0. === 0); // true

所以

0.-5

评估为

0 - 5

-5。同样,

0.-5+1

0 - 5 + 1

-5 + 1

-4

答案 1 :(得分:40)

0.-5可以成功解析为0. [1] -5。下面是AST资源管理器生成的表达式的抽象语法树:

Parse tree generated by AST explorer

(以一种意外的方式)这是有效的JavaScript,其值为-5


[1] 根据the grammar for numeric literals,十进制数字和指数部分是可选的:

  

NumericLiteral ::
  DecimalLiteral
  [...]

     

DecimalLiteral ::
  DecimalIntegerLiteral。 DecimalDigits opt ExponentPart opt

答案 2 :(得分:36)

在JS中,您可以用可选的小数点表示数字。

x = 5.;    //5
x = 5. + 6.   //11

根据Tvde1的评论,也可以应用任何Number方法。

5..toString()

此语法使我们可以在不带括号的情况下运行Number函数。

5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome

请参阅this问题以找出原因。

答案 3 :(得分:8)

我认为真正的答案不是小数点,而是减号:如果在它前面加一个看起来像数字的东西,难道不是要解释为运算符吗?

答案 4 :(得分:5)

console.log(0. - 5)      // -5
console.log(0 - 5)       // -5
console.log('0.' - 5)    // -5
console.log('0' - 5)     // -5
console.log(0.-5 === -5) // true

“ 0”。或'0'在JavaScript中是相同的,因为类型对于数字来说是唯一的,称为Number。负号运算符位于数字之间,请始终尝试将传递的内容转换为数字。 在Python中有所不同,第一个是Float,第二个是Integer,因为它有几种类型。