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()似乎工作得很好,而且它确实更清楚发生了什么