javascript陷阱之in語句

來源:互聯網
上載者:User

標籤:元素   公司   pre   image   判斷   asc   key   var   存在   

最近在擼公司的項目,前後端加背景資料分析一起挑,腦子裡的js文法和Python文法大亂鬥,由此鬧出了很多讓人哭笑不得的烏龍,比如今晚踩的一個js的坑。

 

先拋出兩張圖作比較(為Python語句,為javascript):

很好,in語句似乎通用於py和js判斷一個元素是否存在於數組之中,然而,神奇的還在下面(javascript代碼):

 

???3不在數組[3 , 2 , 1]裡???

???"a"不在數組["a" , "b"]裡???

 

問題在於,in在JavaScript世界中的作用和in在Python世界中的作用有所不同。

in語句在Python世界中即可用於List對象,也可用於Dict對象(val1 in dict1 判斷val1是否在dict1的key的集合裡)。

然而,in語句在JavaScript中只可用於Object對象,正確用法如:

 

那麼在寫JavaScript代碼的時候,如何判斷元素是否存在於Array對象中呢?

1.原生js方法之遍曆大法:

1 function in_array(searchString,array) {2   for (i=0;i<array.length;i++) {3     if ( searchString == array[i] ) return true;4   }5   return false;6 }7 if ( in_array(‘oak‘,trees) ) document.write(‘true‘); //顯示true8   else document.write(‘false‘);

2.原生js方法之合理利用in操作符:

(既然我們知道in 可以用於判斷對象的屬性值,那麼,同樣的,我們可以把數組一一映射到對象的屬性,然後再用in 判斷。)

 1 function oc(a) 2 { 3   var o = {}; //相當於var o = new Object(); 4   for(var i=0;i<a.length;i++) 5   { 6     o[a[i]]=‘‘; //注意該寫法,不能寫成o.a[i] 7   } 8   return o; 9 }10 if ( ‘oak‘ in oc(trees) ) document.write(‘true‘); //顯示true11   else document.write(‘false‘);12 o = oc(trees);13 if ( o.oak != ‘undefined‘ ) document.write(‘true‘); //顯示true14   else document.write(‘false‘); //true15 if ( o[‘oak‘] != ‘undefined‘ ) document.write(‘true‘); //顯示true16   else document.write(‘false‘); //true

參考自:https://snook.ca/archives/javascript/testing_for_a_v

3.jquery大法:

1 $.inArray(value, array)   

 

javascript陷阱之in語句

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.