记一下关于for in

刚才写到了需要在一个数组的位置添加一个元素,用到了for in这个遍历方法,总所周知的,for in循环的是数组的下标,所以一开始我是这么写的。

    function addArrItem(item, arr) {
        let newArr = [item];
        for(let index in arr) {
            newArr[index+1] = arr[index];
        }
        return newArr;
    }

乍一看这样子写好像没有问题,但是实际上还是有问题的,再chrome中运行一下。
运行
可以看到这完全是和我们期待的结果不一样,然后不这个输出的结果展开可以看到
展开后
我们了解的是数组元素是靠index来定位的,而index是是数字(Number),01,02这样子的是不存在的,那么只能说明他是一个字符串(String),那是哪里出了问题呢,我们看到newArr[index+1],只有是这里的index有问题了,他是一个字符。
后来我把这个改为了newArr[parseInt(index)+1],没错这时候就是正确的了。那么就只能证明for in里面迭代的是字符串形式的了,然后在仔细看输出的展开形式,我发现JavaScript中的数组和对象的区别实在是很小了,几乎就只有一个使用大括号包括一个是用方括号包括的区别了。
至于,index实际上是完全没有什么区别了,他只是默认的转换为数字(Number)形式的下标,如果是转换以后会改变值的(比如说01 aabbcc)就不会改变啦。数字索引默认排在前面,其他的排在后面,悄悄告诉你貌似数组和对象都可以作为index哦。

但是我上面所写的还是有问题,比如说如果我所要添加的item是一个对象,而我以后再某个其他的地方对原本的那个对象做了改变。

object.addEle = "bilibili"

那我所添加到数组里面的也会相应的发生改变,这就是我的另一个问题了。

猜你喜欢

转载自www.cnblogs.com/freesfu/p/10091985.html