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)   
  • 相关阅读:
    Entity Framework 学习初级篇7基本操作:增加、更新、删除、事务
    Flash Lite基础知识
    instantclient_10_2客户端配置
    Flash Player9.0 跟Flash Player8.0区别
    Adobe Flash Lite3
    flashlite3无法接入网络的解决办法
    sendAndLoad(LoadVars.sendAndLoad 方法)
    乐高模式
    FMS应用实例 从FMS服务器读取文件(图片/SWF/文本)到客户端
    as2.0 fscommand的用法
  • 原文地址:https://www.cnblogs.com/maoguy/p/7011107.html
Copyright © 2011-2022 走看看