zoukankan      html  css  js  c++  java
  • 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)   
  • 相关阅读:
    generatorConfiguration详解
    fastjson java类、字符串、jsonObject之前的转换
    非CI执行Allure2 trends空白问题
    如何相互转换逗号分隔的字符串和List【转】
    搞服务器性能时有感
    EF实体实现链接字符串加密
    小程序接口测试之本地测试
    WebApi生成在线API文档--Swagger
    C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法【转】
    懵逼的this指向
  • 原文地址:https://www.cnblogs.com/maoguy/p/7011107.html
Copyright © 2011-2022 走看看