javascript之類型陷阱

       今天分享一個我前幾天寫代碼遇到的經典錯誤,大家也一起來找找,看你們能發現嗎?

       項目就是一個簡單的ajax用戶名驗證,下面用代碼開始講解:

       前端頁面:

       <script type='text/javascript' src='jquery.js'></script>

       <form action="" method='post'>

            用戶名:<input type='text'  name='uname'><span></span><br/>

       </form>

       JS驗證代碼:

       <script type='text/javascript' >

            $('input[name=uname]').blur = function(){                   //  jquery的強大選擇器和blur方法

                   var obj = $(this);               // 當前表單對象

                   var send_data = {'uname':obj.val()};

                   $.post('check.php',send_data,function(data){                   //  jquery的post請求Ajax驗證

                           if(data){

                                  //  jquery的連綴,next()指代的是span標籤,而html是span標籤的方法

                                  obj.next().html("<font style='color:red'>用戶名已經存在</font>");

                           }else{

                                 obj.next().html("<font style='color:green'>用戶名可以使用</font>");

                           }

                   })

            }

       </script>

       PHP後端代碼:

       $arr = array('Klose','Kobe','Bayern');

       if(in_array($_POST['uname'],$arr)){

               echo 1;

       }else{

               echo 0;

       }

      

       好了,代碼寫完了,但是這個時候你運行程序,無論你在表單填寫的是任何名字,得到的結果都是:“用戶名已經

存在”!!!爲什麼會這樣呢?我其實也困擾了很久,程序邏輯處理看似沒有問題,但是卻忽略了一個知識點,那就是

javascript其實也是有類型的,我們從PHP頁面返回的值,在js頁面用typeof打出來,結果發現:是string字符類型,

就是從表面上看是數字0或者1,結果是字符0或者1,因此if(data)會永遠是真!

       解決辦法有兩個:1. js判斷加上一句:if(data == 1),這樣雖然字符1和數字1的類型不同,但是==只判斷數值,因

此這種方法是可行的(不推薦);      2. 改寫PHP頁面的代碼,直接返回true和false,這樣避免了類型問題(推薦)

       大家可以關注我的微信公衆號:iwork,我會每天推送一篇原創文章,讓大家都能有所收穫!


 

       


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章