Javascript:什么是";-0“;做什么?

Javascript:什么是";-0“;做什么?,javascript,Javascript,这纯粹是一个教育问题 我正在开发一个新版本的网络应用程序,这是我所在的公司早些时候开发的。在重新编写数学时,我遇到了这样一个问题: document.getElementById("estResidual").value-0; 认为“-0”没有任何用途,我将其删除。但是当我试着计算时,这些数字都被忽略了。然后我试着重新添加“-0”,瞧!一切都很顺利 问题: “-0”是如何更改值的?这是对JavaScript软键入行为的(ab)使用。在这种情况下,它将字符串转换为浮点: > "13" "1

这纯粹是一个教育问题

我正在开发一个新版本的网络应用程序,这是我所在的公司早些时候开发的。在重新编写数学时,我遇到了这样一个问题:

document.getElementById("estResidual").value-0;
认为“-0”没有任何用途,我将其删除。但是当我试着计算时,这些数字都被忽略了。然后我试着重新添加“-0”,瞧!一切都很顺利

问题: “-0”是如何更改值的?

这是对JavaScript软键入行为的(ab)使用。在这种情况下,它将字符串转换为浮点:

> "13"
"13"
> "13"-0
13
> "1.01"-0
1.01
一元
+
将执行相同的操作:

> +"13"
13
> +"9.9"
9.9
请注意,使用
+
会将整数
0
转换为字符串并将其串联:

> "13"+0
"130"

这都是标准化的。有关这些运算符应该如何操作的详细信息,您可以随时查看ECMAScript语言规范(例如。)。

JS引擎会动态地重新转换,以尝试使语句正常工作。因此,当您尝试对其执行数学运算时,JS会将“23”转换为整数
23
,同样,如果您执行以下操作,JS会将整数
23
转换为字符串“23”:

var a = 23;
console.log(23 + "asdf");
//outputs "23asdf"

这会迫使对象类型变成一个数字而不是字符串。

注意-当您使用
+0
时,它可能仍然看起来像一个串联。“负号并没有混淆。@弗洛里斯-只要重新阅读你的评论,并意识到。。。所以我删除了我的。:)这不是一个真正的静态类型问题。一种静态类型的语言可能有这种确切的行为,其中表达式的类型
-
将是
。克劳迪乌的答案比我的答案要好得多为什么是“滥用”?当然,学习不同的语言使用方法是有益的,不是吗?或者这是一种最好避免的做法,因为草率的编码很容易出现问题?@DanTheGameMan:我个人不喜欢它,因为它根本不清楚目的是什么。毕竟,您必须在stackoverflow上询问它的功能=)。然后看到
-0
起作用,考虑到算术的特性,你可能会期望
+0
以同样的方式起作用,但这会给你一个完全不同的结果!我建议使用
parseInt()
parseFloat()
parseFloat()似乎工作得很好,而且它确实更清楚发生了什么