为了账号安全,请及时绑定邮箱和手机立即绑定

在测试不包含0的数组中是否存在0时,为什么javascript的“ in”运算符返回true?

在测试不包含0的数组中是否存在0时,为什么javascript的“ in”运算符返回true?

当测试数组中是否存在“ 0”时,即使数组中似乎不包含“ 0”,为什么Javascript中的“ in”运算符也会返回true?例如,这返回true,并且很有意义:var x = [1,2];1 in x; // true这返回false,并且很有意义:var x = [1,2];3 in x; // false但是,这返回true,我不明白为什么:var x = [1,2];0 in x;
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

它引用索引或键,而不是值。 0并且1是该阵列的有效指标。还有一些有效的键,包括"length"和"toSource"。尝试2 in x。这将是错误的(因为JavaScript数组的索引为0)。

查看完整回答
反对 回复 2019-12-03
?
largeQ

TA贡献2039条经验 获得超7个赞

该in运营商不这样做,你在想它做什么。该in运营商的回报true,如果指定的操作数是对象的属性。对于数组,它返回true操作数是否为有效索引(将数组视为特殊情况下的对象,在该对象中将属性简单地命名为0、1、2,...是有意义的)


例如,尝试以下操作:


javascript:var x=[1,4,6]; alert(2 in x);

它还将返回true,因为“ 2”是数组的有效索引。同样,“ 0”是数组的索引,因此也返回true。


查看完整回答
反对 回复 2019-12-03
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

除IE外,现代浏览器都支持几种可以在数组中查找值的方法。


indexOf和lastIndexOf返回其参数在数组中完全匹配的第一个(或最后一个)索引;如果找不到匹配的元素,则返回-1。


if(A.indexOf(0)!= -1){

    // the array contains an element with the value 0.

}

您可以在IE和旧版浏览器中添加一种或两种方法,


if(![].indexOf){

    Array.prototype.indexOf= function(what, i){

        i= i || 0;

        var L= this.length;

        while(i< L){

            if(this[i]=== what) return i;

            ++i;

        }

        return -1;

    }

    Array.prototype.lastIndexOf= function(what, i){

        var L= this.length;

        i= i || L-1;

        if(isNaN(i) || i>= L) i= L-1;

        else if(i< 0) i += L;

        while(i> -1){

            if(this[i]=== what) return i;

            --i;

        }

        return -1;

    }

}


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 933 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信