【问题标题】:When to use parseInt何时使用 parseInt
【发布时间】:2013-03-15 10:03:26
【问题描述】:

从 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/

【问题讨论】:

    标签: javascript jquery parseint


    【解决方案1】:

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

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

    但是,例如 * 运算符隐式执行此强制,因此在这种情况下您不需要 parseInt 调用(例如,请参阅 updated fiddle)。

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

    $('#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
    

    【讨论】:

    • 这听起来很合理。有时我在使用从 DOM 中提取的数字进行计算时遇到了一些严重的问题,因此我一直在处理数字时始终使用 parseInt。你的回答证实了这一点。这样我就安全了。
    • stackoverflow.com/questions/11786758/… 这个问题还解释了为什么你应该总是提供一个基数,因为在解析整数时会有一些奇怪的浏览器怪癖。
    【解决方案2】:

    唯一的规则:

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

    【讨论】:

    • ... 你插入回 DOM 的每个值都会变成一个字符串。
    【解决方案3】:

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

    • 值本身是一个字符串
    • 使用运算符+ 将连接两个字符串
    • 使用运算符- 将计算数值差
    • ...

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-29
        • 2020-05-12
        • 1970-01-01
        • 2017-01-21
        • 2021-02-27
        • 2012-05-11
        • 2013-10-02
        • 1970-01-01
        相关资源
        最近更新 更多