javascript陷阱之in语句
生活随笔
收集整理的這篇文章主要介紹了
javascript陷阱之in语句
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在擼公司的項目,前后端加后臺的數據分析一起挑,腦子里的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'); //顯示true
8 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'); //顯示true
11 else document.write('false');
12 o = oc(trees);
13 if ( o.oak != 'undefined' ) document.write('true'); //顯示true
14 else document.write('false'); //true
15 if ( o['oak'] != 'undefined' ) document.write('true'); //顯示true
16 else document.write('false'); //true
參考自:https://snook.ca/archives/javascript/testing_for_a_v
3.jquery大法:
1 $.inArray(value, array)
總結
以上是生活随笔為你收集整理的javascript陷阱之in语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware VIC
- 下一篇: 农村信用社网上银行怎么登录?农信社网银登