假设我以意外的方式将0.5
写为0.-5
,但是它仍然可以运行。 0.
中的0.-5
会做什么,以便它仍然可以运行并评估为-5?
我还尝试了{-4},它打印了-4,JavaScript会忽略alert(0.-5+1)
中的0.
吗?
答案 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资源管理器生成的表达式的抽象语法树:
(以一种意外的方式)这是有效的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,因为它有几种类型。