zoukankan      html  css  js  c++  java
  • js中关于两个变量的比较

      今天在匆忙的写代码过程中,测试突然跑过来跟我说,有一个小的bug,但是不能完全的复现,但确实存在。需要我们这边参与查找。首先来说一下我们这个的业务逻辑,其实非常的简单,就是一个开房间的后台,里面有一项是设置这个房间的消耗金币数。这个消耗是存在“最低消费”这个概念的。根据这个房间的不同配置,最低消费是不同的。房主可以自行更改这个消耗数,但是不能低于最低消耗。

      业务很简单,所以我们也很简单的完成了,就是把最后提交的时候,我们验证一下他这个输入的金币数大于最低消耗的金币数就可以了。因为每次房间配置的不同,我们使用ajax获取房间的最低消耗金币数。然后验证,结果有的时候就提示填写的数值小于了最低消耗数。WTF,怎么可能呢。而且这个不是稳定的复现的,有的时候行,有的时候不行。最后在我们的积极测试下,能复现这个bug了,就是房间的最低消耗是200金币,房主填写的是1200金币,这个时候提示小于最低了。也就是判断中200>1200 ???

    这个时候我突然想到了什么,就是大小比较的时候,数据类型是不是出错了?肯定是,结果找到后台,发现是他们更改了数据的类型,原来的时候是number的数据类型,这次改成string类型了,而且我们写的input输入框,这里获取到的数据类型是不是number?所以就有了一下的测试。先看代码:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6         <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
     7         <style type="text/css">
     8             input{
     9                 width: 400px;
    10             }
    11         </style>
    12     </head>
    13     <body>
    14         <h1>为了测试数据类中的数据转换</h1>
    15         <h4>填写一个数值和1200比较</h4>
    16         <input type="text" name="" id="" value="" placeholder="如果填的数字小1200,提示true,否则提示false"/>
    17         <button>比较</button>
    18     </body>
    19     <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    20     <script type="text/javascript">
    21         var num1 = "1200";
    22         $("button").on("click",function(){
    23             var input_val = $("input").val();
    24             console.log($.type(input_val));
    25             console.log($.type($("input").val()));
    26             if(num1>input_val){
    27                 alert(num1+">"+input_val);
    28             }else{
    29                 alert(num1+"<"+input_val);
    30                 
    31             }
    32         })
    33     </script>
    34 </html>

      这里基本上就是在重现我们的bug,当你填入200的时候,出现了200>1200的奇观。准确的说应该是"200">"1200"。这个问题我是知道的,因为js中存在数据的隐性转换,如果你用一个字符串跟一个数字比较的话,字符串会被转换成数字类型,但是因为后台数据格式变了,所以就成了字符串与字符串比较了。字符串与字符串比较是按位比较,当第一位的时候,1小于2,所以就成了200>1200。关于这个的详细情况,请点击这里查看。这里还有一点是需要注意的,那就是我们的输入框使用的是input 这里获取的数据是string类型,虽然我们对这个输入框加了限制只能输入数字,但是这个数据类型还是string的类型。所以一本万利的办法就是在验证的时候,对这个两个变量都进行强制转换程数字。也就是在上面程序的26行改成下面的代码:

    if(Number(num1)>Number(input_val)){

    这样就能正确的啦!

  • 相关阅读:
    摄像机标定公式推导
    roscpp源码阅读
    机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)
    机器学习(Machine Learning)&深度学习(Deep Learning)资料(下)
    【概率论与数理统计】全概率公式和贝叶斯公式
    机器学习之一些基本概念及符号系统
    机器学习之代价函数(cost function)
    机器学习之逻辑回归(Logistic Regression)
    机器学习之神经网络模型-下(Neural Networks: Representation)
    机器学习之神经网络模型-上(Neural Networks: Representation)
  • 原文地址:https://www.cnblogs.com/daniao11417/p/9792310.html
Copyright © 2011-2022 走看看