黑帽联盟

 找回密码
 会员注册
查看: 1967|回复: 2
打印 上一主题 下一主题

[其它] JS数组中的indexOf用法 - 黑帽常用

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    前言
    说到indexOf用法,大家应该不陌生吧,在黑帽中我们经常用到,比如说,以前的搜索引擎jiechi,蜘蛛jiechi等等,下面就给大家来介绍下其用法

    String 类型的使用
    大家熟知的字符串用法,举个
    let str = 'baidu';

    str.indexOf('b'); //0
    str.indexOf('d'); //3
    str.indexOf('h'); //-1
    这里 0 和 3 分别是 b 和 d 在字符串中出现的位置。起始下标是 0。而 -1 代表未匹配。

    曾经有人问我为什么偏偏是 -1 不是 null 或者 undefined。你去问制定规则的人啊!一脸无奈。
    大家看到这里感觉没什么亮点啊,别急接着再来一个例子
    let numStr = 'google';

    numStr.indexOf('g'); //0
    numStr.indexOf(g); //0
    看到这里有个小点就是 indexOf 会做简单的类型转换,把数字转换成字符串 'g' 然后再执行。

    Number 类型的使用
    大家可能会想 number 类型有没有 indexOf 方法因为会做隐式转换嘛!明确告诉大家没有,上例子
    let num = 2016;

    num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function
    非要对 number 类型使用 indexOf 方法嘞?那就转换成字符串咯,接着上例来写
    //二逼青年的写法
    num = '2016';
    num.indexOf(2); //0

    //普通青年的写法
    num.toString().indexOf(2); //0

    //文艺青年的写法
    ('' + num).indexOf(2); //0
    第一种写法简单直接,对于已知的较短的数字也不是不可行。但是 num 变量针对不同数据是变化的时候,怎么办呢?❌
    第二种写法最为常用,但对比第三种写法长了一点。哈哈,其实都可以,代码洁癖的人喜欢第三种 ✅

    Array 类型的使用
    大家提起精神,大boss来了。
    数组方法大家再熟悉不过了,却忽略了数组有 indexOf 这个方法(我个人感觉)。
    干说不练瞎扯淡,遇到了什么问题,注意⚠️点又在哪里?
    let arr = ['baidu', 'google', 'haosou'];

    arr.indexOf('baidu'); //0
    arr.indexOf('b'); //-1

    arr.indexOf('google'); //1
    arr.indexOf(google); //-1
    这里没把例子拆的那么细,四个用例足以说明问题。
        arr.indexOf(‘baidu) 输出 0 因为 ‘baidu' 是数组的第 0 个元素,匹配到并返回下标。
        arr.indexOf(‘b') 输出 -1 因为此方法不会在每一个元素的基础上再次执行 indexOf 匹配。
        arr.indexOf(‘google') 输出 1 因为此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回全部匹配的下标。
        arr.indexOf(google) 输出 -1 注意:这里不会做隐式类型转换。

    大家做类似判断的时候多留意。不要误认为数字会转成字符串,同理字符串也不会转换成数字。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    132

    主题

    11

    听众

    295

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    擦汗
    2018-6-12 09:41
  • 签到天数: 273 天

    [LV.8]以坛为家I

    主要是用来判断字符存不存在的,或者判断字符所在的位置
    回复

    使用道具 举报

    49

    主题

    1

    听众

    248

    积分

    至尊VIP

    Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2018-7-15 21:02
  • 签到天数: 215 天

    [LV.7]常住居民III

    这个判断搜素引擎标识符,还是不错的
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部