Plus运算符正在追加而不是数学运算

时间:2014-01-06 16:22:58

标签: javascript jquery

在运行此代码的JavaScript中:

parent.css("top") + parent.height() * 2

Chrome控制台的结果是:

  

100px320

为什么会发生这种情况? parent.height()等于160,所以似乎parent.css("top")是一个字符串,JS只是在字符串中添加一些字符而不是进行数学计算。

为什么它不起作用,我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

您需要将字符串更改为数字 - 您可以使用parseInt执行此操作:

parseInt(parent.css("top"),10) + parent.height() * 2

答案 1 :(得分:1)

+运算符在Javascript中“重载”。

真正发生的事情是Javascript中没有输入,因此+运算符正在尝试强制您的值为+ - 能够。

你是对的.css("top")是一个字符串:.css方法将完全返回CSS中的内容,你最好在CSS中使用单位声明。

当Javascript在两个不同类型的变量之间遇到+时,它会尽力而为,并将整数强制转换为字符串,这样就不会失去任何精度。

你可以做这样的事情来解决它:

parseInt( parent.css( "top" ) ) - - parent.height() * 2;

这有两个问题:

  1. parseInt取第一个整数看到并返回。 100px将返回100 ,但也会返回100,400 。小心。

  2. - -会强制Javascript进行算术运算,因为你要求它从负数中减去一个数字,这与加法相同。但是,-运算符没有歧义,因此它将工作或生成NaN