Javascript:奇怪的类型转换

时间:2015-04-08 21:53:54

标签: javascript jquery types numbers typeof

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

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

});

当按键事件触发时,它的行为与预期相同,但是如果我开始使用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>

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

而不是parseInt,您应该使用parseFloat

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"

时失败