標籤:元素 公司 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語句