Javascript 为什么0-5等于-5?

Javascript 为什么0-5等于-5?,javascript,numbers,Javascript,Numbers,假设我以意外的方式将0.5写成0.-5,但它仍然可以运行。0.中的0.-5做了什么,这样它仍然可以运行并计算为-5 我还尝试了警报(0.-5+1)打印-4,JavaScript是否忽略0.中的0.-5?后面的数字是可选的: console.log(0.==0);//true在JS中,您可以用可选小数点表示数字 x = 5.; //5 x = 5. + 6. //11 在Tvde1的评论中,任何数字方法也可以应用 5..toString() 此语法允许我们运行不带括号的数字函数 5

假设我以意外的方式将
0.5
写成
0.-5
,但它仍然可以运行。
0.
中的
0.-5
做了什么,这样它仍然可以运行并计算为-5


我还尝试了
警报(0.-5+1)
打印-4,JavaScript是否忽略
0.
中的
0.-5

后面的数字是可选的:


console.log(0.==0);//true
在JS中,您可以用可选小数点表示数字

x = 5.;    //5
x = 5. + 6.   //11
在Tvde1的评论中,任何数字方法也可以应用

5..toString()
此语法允许我们运行不带括号的数字函数

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

请参阅问题以了解原因。

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

这(以意外的方式)是有效的JavaScript,计算结果为
-5


[1] 根据十进制数字和指数部分,可选择:

数值文字::
小数位数
[……]

小数位数::
小数单位文字。小数位数选择指数部分选择


我认为真正的答案不是关于小数点,而是关于减号:如果它前面有任何看起来像数字的东西,那不就是一个运算符吗?

console.log(0-5)/-5
控制台日志(0-5)/-5
console.log('0.'-5)/-5
控制台日志('0'-5)/-5

console.log(0-5==-5)//true
0.
类似于
0.0
。或者仅仅是
0
。你怎么会认为
0.-5
是一种“意外的方式”?@NicoHaase:我很确定OP使用了“意外的方式”来表示“我不打算/期望写那个,但不知怎的我写了”。这在许多其他语言中也适用(例如Python)。我个人一点也不喜欢。我宁愿让
0.-5
成为一个语法错误,不允许浮点文本带有尾随句点,而是强制人们在末尾写
.0
。这尤其糟糕,因为允许数字以
结尾会阻止你写类似
123的东西。toString(16)
(一个常见的技巧是使用
123..toString(16)
,实际上是
(123.)。toString(16)
)您甚至可以执行
5..toString()
。如果事实如此,您必须执行5..toString()来调用该方法,否则,您必须使用括号:(5)。toString()@PeterMortensen Ruby就是其中之一。还有ALGOL 68。在Common Lisp中,奇怪的是,
1.0
是浮点,但
1.
是整数。@Florian如果您不这样做,但这并不意味着解析器应该使用特殊的大小写来拒绝它
float
s有方法,而
5.
是一个
float
。你可以将
5.toString()//awesome
添加到列表中:)然后,至少从某些角度来看,小数点仍然是被解释为数字文字的一部分,否则减号前面的内容不会“看起来像数字”。您是如何提取AST的?转到,选择语言和解析器,粘贴代码,选择JSON输出(或只是截图)。前导数字也是可选的,因此。0-5也是有效的。此问题与类型无关;它只与语法有关。