【问题标题】:Javascript: Strange type conversionJavascript:奇怪的类型转换
【发布时间】:2015-06-14 02:00:48
【问题描述】:

我有以下代码可以简单地更改数字值:

//zoom select
var zoom = 1;
$('select#zoom').change(function(e) {
    zoom = $(this).val();       
    console.log('zooming to: ', Math.floor(zoom*100), '%'); 
});

//zoom incremental  
$(document).keypress(function(e) {
    //out
      if(e.keyCode == 45){
        if (zoom > 0) zoom = parseInt(zoom,10) - 0.1;
        $('select#zoom').val(zoom);
        console.log('zooming to: ', Math.floor(zoom*100), '%'); 
        console.log('Type:',typeof zoom,' ',toString(zoom)); //*flag
      }
    //in
      if(e.keyCode == 43){
        if (zoom < 2) zoom = parseInt(zoom,10) + 0.1;
        $('select#zoom').val(zoom);
        console.log('zooming to: ', Math.floor(zoom*100), '%');
        console.log('Type:',typeof zoom,' ',toString(zoom)); //*flag
      }
    
});

当 keypress 事件触发时,它的行为与预期一样,但是如果我从使用 select 元素开始,然后按一个键来更改值,则输出如下所示:

缩放到:50%

缩放到:NaN%

类型:数字[对象窗口]

HTML:

<select id="zoom">
            <option value="2">200%</option>
            <option value="1.5">150%</option>
            <option value="1.25">125%</option>
            <option value="1" selected>100%</option>
            <option value=".75">75%</option>
            <option value=".5">50%</option>
            <option value=".25">25%</option>            
        </select>

这让我发疯了。有什么想法吗?

提前致谢。

【问题讨论】:

  • 似乎这一行是问题开始的地方zoom = $(this).val();。你应该确保它是一个数字。
  • 我尝试过使用zoom = parseInt($(this).val(), 10);,但奇怪的是它丢失了值,即可能将其转换为 undefined 或 null。
  • zoom = $(this).val(); 保存一个字符串,您需要将其转换为正确类型的数字 - 当然最好首先将其保存为数字(触发 onchange 时),所以您不必一遍又一遍地转换它。有关更多信息,请参阅我的回答。
  • @JanLegner 做到了!你是个聪明人。助教

标签: javascript jquery types numbers typeof


【解决方案1】:

你应该使用parseFloat而不是parseInt

parseInt(".25"); // returns NaN, because first char is not a valid char considering we are reading integer
parseFloat(".25") // returns 0.25

另请注意,对于整数(例如 "2""1"),您的解决方案有效。尝试解析浮点数时失败 (".25")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多