14

从 DOM 中提取数字并使用它们进行计算时,我必须遵循哪个规则?javascript 如何知道一个值是否为数字?我应该总是使用 parseInt 吗?

给定以下代码:

HTML

<div id="myvalue">5</div>
<div id="withParseInt"></div>
<div id="withoutParseInt"></div>
<div id="withoutParseIntButIncrement"></div>

JS 和 jQuery:

var value = $('#myvalue').text();
$('#withParseInt').text(parseInt(value) + 1);
$('#withoutParseInt').text(value + 1);
$('#withoutParseIntButIncrement').text(value++);

给出以下输出:

5
6
51
5

小提琴:http: //jsfiddle.net/ytxKU/3/

4

4 回答 4

12

.text()方法将始终返回一个字符串。一些运算符(如+运算符)被重载以执行算术和字符串运算。在字符串的情况下,它执行连接,因此结果为“51”。

如果您有一个字符串并且需要使用非强制运算符,则必须使用parseInt(或其他一些转换为数字的方法)。

但是,*操作员例如隐式执行此强制,因此在这种情况下您不需要parseInt调用(例如,请参阅更新的小提琴)。

请注意,增量++运算符确实会强制其操作数,但您使用了后缀运算符,因此它不会产生任何影响。使用前缀运算符,您可以看到它的工作:

$('#withoutParseIntButIncrement').text(++value);

所以,总结一下:

// Parses string to number and adds 1
$('#withParseInt').text(parseInt(value) + 1);

// Coerces number 1 to string "1" and concatenates
$('#withoutParseInt').text(value + 1);

// Implicity coerces string to number, but after it's been inserted into the DOM
$('#withoutParseIntButIncrement').text(value++);

// Implicity coerces string to number, before it's been inserted into the DOM
$('#withoutParseIntButIncrement').text(++value);

// Implicity coerces to number
$('#withoutParseIntButMultiply').text(value * 2);

旁注:始终将第二个参数(基数)传递给parseInt. 这可确保以正确的基数解析数字:

parseInt(value, 10); // For base 10
于 2013-03-15T10:06:22.680 回答
7

一个也是唯一的规则:

您从 DOM 检索的每个值都是一个字符串。

于 2013-03-15T10:06:17.953 回答
1

是的,为了安全起见,您应该始终使用 parseInt() 或 Number()。否则 Javascript 将决定如何处理它

  • 值本身是一个字符串
  • 使用运算符+将​​连接两个字符串
  • 使用运算符-将​​计算数值差异
  • ...
于 2013-03-15T10:06:16.273 回答
1

为了安全起见,使用它总是好的parseInt,尤其是当您可以提供第二个参数供数值系统使用时。

++value顺便说一句,在你的最后一个例子中,如果你希望它等于 6,它应该是。

于 2013-03-15T10:08:38.937 回答