在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录

来源:07素材网 03月16日 20:49
前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发现比较大小的判断就出了问题:

// js弱类型导致的诡异现象,11 > 9  false
function downtest(id){// 现象是当val取到的元素val值是11的时候,11>9结果是false
    // 当前点击下一题的是第几题,
    var val=$("#"+id).attr("val");
    var valint = parseInt(val);// 如果不把这个变量手动转成数字,当val大于等于10的时候(小于10的时候当做是数字)js就会把它作为一个字符串处理,弱类型语言导致的
    // 如果当前这个题号比已答题数大的话,就让已答数量变成当前题号
    console.log('valint: '+valint+'num: '+num+(valint>num));
    console.log(valint+num);
    if (valint>num) {
        document.getElementById("numbers").innerText=valint;
        num=valint;
    }else{
        document.getElementById("numbers").innerText=num;
    }
    var div = $("#"+id);
    var n = div.next(); //后一个兄弟
    div.hide();
    n.show();
    a++    
}

当获取到的这个值为11的时候(第四行),被比较的变量是9,按理说11>9的结果应该是true吧,但是打印出来的log显示是false.....我后来查了查资料,自己总结一下,发现如果当获取到的属性值超过或等于10,js就会把这个变量视为字符串处理,而不是在比较时作为数字,

解决的办法就是手动转换为数字(第五行),这个时候再打印出来就是正确的数字对比结果了,比较小的一个小坑吧,记录一下
原文出处:https://www.cnblogs.com/zizaiwuyou/p/10538157.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。

头条

在使用SQLite3时遇到的几个坑

在使用SQLite3时遇到的几个坑

《本打算在SQLite3数据库里执行一个查询语句,使用的是php语言,起初遇到的是权限问题: permission denied,因为SQLite3数据库文件和PHP执行者属于两个不同的用户,首先需要对这个文件执行mode 777的权限开放,然后,又遇到了下面这样的PHP错误