2014-03-04 37 views
9

这纯粹是一个教育问题。Javascript:什么是“ - 0”在干什么?

我正在研究一个我正在为之工作的公司的新版本的Web应用程序。当重写数学时,我碰到了这个:

document.getElementById("estResidual").value-0; 

认为没有目的的“-0”,我删除它。但是当我尝试计算时,数字是waaayyyyyyy关闭。然后我尝试重新添加“-0”,瞧!一切都很好。

问题: “-0”做了什么改变值?

+1

注 - 当您使用'+ 0'时,它可能仍然看起来像一个串联。与减号不混淆。 – Floris

+1

@弗洛伊斯 - 只是重新读你的评论,并意识到这一点...所以我删除了我的。 :) – Steve

回答

19

这是(ab)使用JavaScript的软打字行为。在这种情况下,将一个字符串转换为float:

> "13" 
"13" 
> "13"-0 
13 
> "1.01"-0 
1.01 

一元+会做同样的:

> +"13" 
13 
> +"9.9" 
9.9 

注意,使用+反而会转换成整数0成字符串并连接它:

> "13"+0 
"130" 

这是全部标准化的。有关这些操作员应该如何操作的明确细节,可以随时检查ECMAScript语言规范(例如,addition,subtraction,unary plus)。

+0

优秀的知识。 –

+0

为什么“滥用”?当然,学习使用不同语言的方法是有益的,不是吗?或者这是一种最好的避免的做法,因为编码草率很容易出现问题? – DanTheMan

+6

@DanTheGameMan:我个人不喜欢它,因为它根本不明显。毕竟,你不得不在stackoverflow上询问它做了什么=)。然后看到'-0'的作用,你可能会认为'+ 0'的算法具有相同的工作方式,但这给了你一个完全不同的结果!我建议使用'parseInt()'或'parseFloat()' – Claudiu

1

JS引擎会立即重新尝试并使语句正常工作。所以JS会施放“23”整数23当您尝试在其上执行数学运算,同样会整数23转换为字符串“23”,如果你这样做:

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

这不是一个真正的静态打字问题。静态类型的语言可以具有这种确切的行为,其中表达式“-”的类型将是“”。 – Claudiu

+0

@Claudiu好点。编辑。 – BLSully

1

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

+0

好,克劳迪乌的答案比我的好得多 – Charles380

+0

你仍然会为此付出努力:) – DanTheMan