Js的条件判断的bug, false 居然通过了 if ?真是这样?

在群里遇到个人说跳转存在问题,求解决;给我的代码是这样的:

他想实现就是限制:北京,上海,重庆 跳转;

很简单,逻辑运算符用错了;改为&&,理论上说应该正常工作了。

  1. <script type=“text/javascript” src=“http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js”></script>  
  2. <script language=“javascript”>  
  3.     function checkMobile() {  
  4.         var pda_user_agent_list = new Array(“2.0 MMP”“240320”“AvantGo”“BlackBerry”“Blazer”,  
  5.             “Cellphone”“Danger”“DoCoMo”“Elaine/3.0”“EudoraWeb”“hiptop”“IEMobile”“KYOCERA/WX310K”“LG/U990”,  
  6.             “MIDP-2.0”“MMEF20”“MOT-V”“NetFront”“Newt”“Nintendo Wii”“Nitro”“Nokia”,  
  7.             “Opera Mini”“Opera Mobi”,  
  8.             “Palm”“Playstation Portable”“portalmmm”“Proxinet”“ProxiNet”,  
  9.             “SHARP-TQ-GX10”“Small”“SonyEricsson”“Symbian OS”“SymbianOS”“TS21i-10”“UP.Browser”“UP.Link”,  
  10.             “Windows CE”“WinWAP”“Androi”“iPhone”“iPod”“iPad”“Windows Phone”“HTC”);  
  11.         var pda_app_name_list = new Array(“Microsoft Pocket Internet Explorer”);  
  12.   
  13.         var user_agent = navigator.userAgent.toString();  
  14.         for (var i = 0; i < pda_user_agent_list.length; i++) {  
  15.             if (user_agent.indexOf(pda_user_agent_list[i]) >= 0) {  
  16.                 return true;  
  17.             }  
  18.         }  
  19.         var appName = navigator.appName.toString();  
  20.         for (var i = 0; i < pda_app_name_list.length; i++) {  
  21.             if (user_agent.indexOf(pda_app_name_list[i]) >= 0) {  
  22.                 return true;  
  23.             }  
  24.         }  
  25.   
  26.         return false;  
  27.     }  
  28.     if (checkMobile()) {  
  29.         var t = remote_ip_info;  
  30.         if (( t.province != ‘北京’ ) || ( t.province != ‘重庆’) || (t.province != ‘上海’)) {  
  31.             window.location.href = (“http://sp.ffxxff.com”);  
  32.         }  
  33. }  
  34. </script>  

实际表现却不是这样,居然进了if;在console里执行条件语句,结果确实是false;靠,什么情况难道是bug?
jsconsole

增加了一些调试信息:
debugjs
发现条件句的返回的结果是true,就更不解了;怎么会是true,最后一项分明是false。

折腾了好久,发现是编码问题:
加上:

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

,浏览器编码再改为自动识别就ok了。

  1. <head>  
  2. <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8” />  
  3. </head>  
  4. <script type=“text/javascript” src=“http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js”></script>  
  5. <script language=“javascript”>  
  6.     function checkMobile() {  
  7.         var pda_user_agent_list = new Array(“2.0 MMP”“240320”“AvantGo”“BlackBerry”“Blazer”,  
  8.             “Cellphone”“Danger”“DoCoMo”“Elaine/3.0”“EudoraWeb”“hiptop”“IEMobile”“KYOCERA/WX310K”“LG/U990”,  
  9.             “MIDP-2.0”“MMEF20”“MOT-V”“NetFront”“Newt”“Nintendo Wii”“Nitro”“Nokia”,  
  10.             “Opera Mini”“Opera Mobi”,  
  11.             “Palm”“Playstation Portable”“portalmmm”“Proxinet”“ProxiNet”,  
  12.             “SHARP-TQ-GX10”“Small”“SonyEricsson”“Symbian OS”“SymbianOS”“TS21i-10”“UP.Browser”“UP.Link”,  
  13.             “Windows CE”“WinWAP”“Androi”“iPhone”“iPod”“iPad”“Windows Phone”“HTC”);  
  14.         var pda_app_name_list = new Array(“Microsoft Pocket Internet Explorer”);  
  15.   
  16.         var user_agent = navigator.userAgent.toString();  
  17.         for (var i = 0; i < pda_user_agent_list.length; i++) {  
  18.             if (user_agent.indexOf(pda_user_agent_list[i]) >= 0) {  
  19.                 return true;  
  20.             }  
  21.         }  
  22.         var appName = navigator.appName.toString();  
  23.         for (var i = 0; i < pda_app_name_list.length; i++) {  
  24.             if (user_agent.indexOf(pda_app_name_list[i]) >= 0) {  
  25.                 return true;  
  26.             }  
  27.         }  
  28.   
  29.         return false;  
  30.     }  
  31.     //if (checkMobile()) {  
  32.         var t = remote_ip_info;  
  33.         alert(t.province);  
  34.         console.log(t.province);  
  35.         alert((t.province != ‘北京’) && (t.province != ‘重庆’) && (t.province != ‘上海’));  
  36.         if(((t.province != ‘北京’) && (t.province != ‘重庆’) && (t.province != ‘上海’))) {  
  37.         console.log(“a”);  
  38.         console.log((t.province != ‘北京’));  
  39.         console.log(“b”);  
  40.         console.log((t.province != ‘重庆’));  
  41.         console.log(“c”);  
  42.         console.log(t.province);  
  43.         console.log(EncodeUtf8(“上海”));  
  44.         console.log((EncodeUtf8(t.province) != EncodeUtf8(“上海”)));  
  45.         console.log(“d”);  
  46.         console.log((t.province != ‘北京’) && (t.province != ‘重庆’));  
  47.         console.log(“e”);  
  48.         console.log((t.province != ‘北京’) && (t.province != ‘重庆’) && (t.province != ‘上海’));  
  49.         console.log(“f”);  
  50.   
  51.             alert(t.province != ‘北京’  && t.province != ‘重庆’ && t.province != ‘上海’);  
  52.             alert(typeof(t.province != ‘北京’  && t.province != ‘重庆’ && t.province != ‘上海’));  
  53.             alert((t.province != ‘北京’  && t.province != ‘重庆’ && t.province != ‘上海’).toString());  
  54.         //  window.location.href = (“http://sp.ffxxff.com”);  
  55.         }  
  56.     //}  
  57.       
  58.     function EncodeUtf8(s1)   
  59.     {   
  60.       var s = escape(s1);   
  61.       var sa = s.split(“%”);   
  62.       var retV =“”;   
  63.       if(sa[0] != “”)   
  64.       {   
  65.          retV = sa[0];   
  66.       }   
  67.       for(var i = 1; i < sa.length; i ++)   
  68.       {   
  69.            if(sa[i].substring(0,1) == “u”)   
  70.            {   
  71.                retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));   
  72.                  
  73.            }   
  74.            else retV += “%” + sa[i];   
  75.       }   
  76.         
  77.       return retV;   
  78.     }   
  79.   function Str2Hex(s)   
  80.   {   
  81.       var c = “”;   
  82.       var n;   
  83.       var ss = “0123456789ABCDEF”;   
  84.       var digS = “”;   
  85.       for(var i = 0; i < s.length; i ++)   
  86.       {   
  87.          c = s.charAt(i);   
  88.          n = ss.indexOf(c);   
  89.          digS += Dec2Dig(eval(n));   
  90.              
  91.       }   
  92.       //return value;   
  93.       return digS;   
  94.   }   
  95.   function Dec2Dig(n1)   
  96.   {   
  97.       var s = “”;   
  98.       var n2 = 0;   
  99.       for(var i = 0; i < 4; i++)   
  100.       {   
  101.          n2 = Math.pow(2,3 – i);   
  102.          if(n1 >= n2)   
  103.          {   
  104.             s += ‘1’;   
  105.             n1 = n1 – n2;   
  106.           }   
  107.          else   
  108.           s += ‘0’;   
  109.             
  110.       }   
  111.       return s;   
  112.         
  113.   }   
  114.   function Dig2Dec(s)   
  115.   {   
  116.       var retV = 0;   
  117.       if(s.length == 4)   
  118.       {   
  119.           for(var i = 0; i < 4; i ++)   
  120.           {   
  121.               retV += eval(s.charAt(i)) * Math.pow(2, 3 – i);   
  122.           }   
  123.           return retV;   
  124.       }   
  125.       return -1;   
  126.   }   
  127.   function Hex2Utf8(s)   
  128.   {   
  129.      var retS = “”;   
  130.      var tempS = “”;   
  131.      var ss = “”;   
  132.      if(s.length == 16)   
  133.      {   
  134.          tempS = “1110” + s.substring(0, 4);   
  135.          tempS += “10” +  s.substring(4, 10);   
  136.          tempS += “10” + s.substring(10,16);   
  137.          var sss = “0123456789ABCDEF”;   
  138.          for(var i = 0; i < 3; i ++)   
  139.          {   
  140.             retS += “%”;   
  141.             ss = tempS.substring(i * 8, (eval(i)+1)*8);   
  142.               
  143.               
  144.               
  145.             retS += sss.charAt(Dig2Dec(ss.substring(0,4)));   
  146.             retS += sss.charAt(Dig2Dec(ss.substring(4,8)));   
  147.          }   
  148.          return retS;   
  149.      }   
  150.      return “”;   
  151.   }  
  152. </script>  

未经允许不得转载:ganlei的个人博客 » Js的条件判断的bug, false 居然通过了 if ?真是这样?

赞 (3)
分享到:更多 ()