美文网首页
JavaScript中in运算符使用的问题

JavaScript中in运算符使用的问题

作者: 高冷a | 来源:发表于2017-08-06 21:53 被阅读0次

在编写一个数组去重的代码的时候遇到一个问题

//正确代码
let a = [1,2,3,4,2,3,4,4,7];
let b = [];
a.map(value => {
    if (b.indexOf(value) !=== -1)  ;
    else  b.push(value);
})
//b = [1,2,3,4,7];

这里使用map方法遍历数组,在方法内赋值,不涉及回调函数的返回值问题,纯粹的将map方法代替一个for循环来遍历数组,个人觉得这样代码简洁一些

但是当时忘记了indexOf这个方法,而是使用了in运算符,代码如下:

//错误代码
let a = [1,2,3,4,2,3,4,4,7];
let b = [];
a.map(value => {
    if (value in b)  ;
    else  b.push(value);
})
//b = [1,2,3,4,4,7];

很明显,上面的代码发生了错误。
在上面的代码中,我理所当然的将in运算符的意思理解为英文的in,使用if语句来判断collection中的value是否存在,即判断a数组中的元素存在b数组中。这种用法错误的曲解了in的意思。
在JavaScript中,使用in运算符,若后面跟的是数组,则前面的参数表示的是数组的下标
因此,在上述错误代码中,实际发生的情况是:

1.value=1,判断b[1]是否存在,由于b此时是一个空数组,于是执行else将1存入b数组中,结果b = [1]
2.value=2,判断b[2]是否存在,由于此时b=[1],于是执行else将2存入b数组中,结果b=[1,2]
3.value=3,判断b[3]是否存在,由于此时b=[1,2],于是执行else将3存入b数组中,结果b=[1,2,3]
4.value=4,判断b[4]是否存在,由于此时b=[1,2,3],于是执行else将4存入b数组中,结果b=[1,2,3,4]
5.value=2,判断b[2]是否存在,由于此时b=[1,2,3,4],于是不执行任何操作,结果b=[1,2,3,4]
6.value=3,判断b[3]是否存在,由于此时b=[1,2,3,4],于是不执行任何操作,结果b=[1,2,3,4]
7.value=4,判断b[4]是否存在,由于此时b=[1,2,3,4],执行else将4存入b数组中,结果b=[1,2,3,4,4]
8.value=4,判断b[4]是否存在,由于此时b=[1,2,3,4,4],于是不执行任何操作,结果b=[1,2,3,4,4]
9.value=7,判断b[7]是否存在,由于此时b=[1,2,3,4,4],于是else将7存入b数组中,结果b=[1,2,3,4,4,7]

最后返回结果b=[1,2,3,4,4,7]

相关文章

  • JavaScript中in运算符使用的问题

    在编写一个数组去重的代码的时候遇到一个问题 这里使用map方法遍历数组,在方法内赋值,不涉及回调函数的返回值问题,...

  • 条件运算符

    条件运算符是JavaScript中功能最多的运算符它经常作为 if 语句的简洁形式来使用。 条件运算符是唯一的三元...

  • 原型链

    在JavaScript中,判断一个变量的类型会用typeof运算符,在使用typeof运算符时采用引用类型存储值会...

  • JavaScript逻辑运算符与赋值运算符

    逻辑运算符 JavaScript中有三个逻辑运算符,&&与、||或、!非。 JavaScript 中的逻辑运算符可...

  • JavaScript中== 和 === 的区别

    JavaScript == 和 === 的区别 "==="严格运算符,"=="相等运算符 建议尽量不要使用相等运算...

  • 03-JavaScript运算符

    JavaScript运算符 和数学的运算符一样,JavaScript中的运算符是告诉程序执行特定算术或逻辑操作的符...

  • JavaScript知识整理——关于值

    数组 在Javascript中,数组可以容纳任何类型的值。 使用delete运算符删除数组中单元时,lenght属...

  • instanceof

    干啥的? 在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运...

  • JavaScript之数组

    JS数组是一种特殊类型的对象 在 JavaScript 中对数组使用 typeof 运算符会返回 "object"...

  • 实用js

    1、单线 If-Else在 JavaScript 中,可以使用三元条件运算符来压缩 if-else 语句。例如: ...

网友评论

      本文标题:JavaScript中in运算符使用的问题

      本文链接:https://www.haomeiwen.com/subject/grmnlxtx.html