-3
var a = $('.box').width();

var b = $(document).height();

现在,假设 124px,是一个intstring

到目前为止,我已经通过反复试验做到了这一点,但现在我很想知道为什么if (b < 20)需要parseInt计算var c = a + b. 这是为什么?

4

4 回答 4

5

注意:出于本问题的目的,我假设aand是类似andb的字符串。实际上会返回(例如,如果您的元素是 123 像素宽),所以在这种情况下是无关紧要的。"10""20"$('.box').width()123parseInt


因为在

a + b

如果您不使用parseInt,那么 JavaScript 将假定您想要连接字符串(因为+连接重载)。但是,当您使用

b < 20

JS 知道你不能有“小于 20 的字符串”,因为这没有任何意义,所以它会自动转换为数字。

于 2013-09-20T00:47:43.737 回答
3

我们没有。

.width()height()返回数字,而不是字符串,因此不需要使用parseInt(...,10). 我不知道你指的“我们”是谁,但它不包括正确使用 jQuery 的人。

在这个网站上尝试一下——打开一个控制台,然后输入var d = jQuery("div"); console.log(typeof d.height(), typeof d.width(), d.height() + d.width());,你会看到 [number]、[number] 和正常数字相加的结果。

于 2013-09-20T00:47:42.903 回答
1

因为当您使用 < 运算符时,只有数字更大或更小才有意义,但是对于“+”,在 javascript 中它也可以用于连接字符串,例如:“30”+“20”=“3020”和 30+20=50

注意:@Mike Poxman Kamerman 是对的,在大多数情况下它可以在没有 parseInt 的情况下工作,因为 jquery 函数的宽度和高度返回浮点数,但这是正确的做法,因为 javascript 过去非常严格,并且在像旧 IE 这样的浏览器中它无法工作.

于 2013-09-20T00:48:01.920 回答
0

当您比较字符串和数字时,必须将一个转换为另一个的类型才能进行比较。该字符串将隐式转换为数字。

当您将+运算符与两个字符串一起使用时,无需进行转换即可进行操作。它只会连接字符串,但如果您想使用运算符进行加法而不是连接,那么您需要先将字符串显式转换为数字。

于 2013-09-20T00:51:50.407 回答