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)){

這樣就能正確的啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM