ie8中使用Array.prototype.splice.call对伪数组进行删除时为什么不能删除?

<script>
var lis = {
"0": "aa",
"1": "bb",
"2": "cc",
"3": "dd",
"length": 4
};
Array.prototype.splice.call(lis, 0, 1);
/*在IE8中length属性变成3了,但第一个元素没有删除掉。在其他浏览器中第一个元素删除了并且length属性也变成3了*/
console.log(lis);
</script>

因为数组应该是for(let i=0;i<list.length;i++){console.log(list.item(i))才能删除。解决步骤如下:

1、首先第一步就是要进行getElementsByTagName 得到的是 HTMLCollections类注意的是有一个ID为'test'的元素,可以直接取得。

2、接着就是这时候进行querySelector 得到的是 NodeList注意的是

document.querySelectorAll('div').forEach((a,b,c)=>{console.log('第一个参数:' + a + '值');console.log。

3、然后就是通过控制台观察发现,两者都具备iterator接口,都可以支持for ... of语相比来讲,援引Arguments来。

4、最后一步就是进行ie8中使用Array.prototype.splice.call对伪数组的删除,这时候就可以删除成功了会有提示的,如下图所示。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-05

这句的意思是:调用数组对象原型里的push方法。

剖开来看:array指的是数组对象;prototype指的是数组对象原型的共享方法区域(这句并不严谨,但是可以这样理解);push:在数组尾压入一个元素;接下来用call来调用就是调用push方法的对象是call的第一个参数。

推荐看一下阮一峰的关于angularjs的继承的文章,讲的比较好。

扩展资料:

start:从当前位置开始移除元素

deleteCount:要移除的元素数量

item:在元素移除后,在start位置要插入的新元素

返回值:由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。

start默认为0,表示从数组的第一个元素开始删除。如果start小于0,则将其与数组长度相加,如果相加结果仍为0,则重置为0。如果start大于等于数组长度,则重置为数组长度。

deleteCount默认为0,如果小于等于0,则不删除元素。如果大于start后面的元素总数,则从start后面的元素都将被删除(含第start位)。

item:要添加进删除位置的元素。

本回答被网友采纳
第2个回答  2017-06-29
functionbox(arr){this.arr=arr;}box.prototype.aa=function(){this.ori=[].concat(this.arr);for(vari=0;i<this.arr.length;i++){for(varj=i+1;j<this.arr.length;j++){if(this.arr[i]==this.arr[j]){this.arr.splice(j,1);}}}alert("原来的是:"+this.ori+"\n"+"去重后:"+this.arr);}varnum=newbox([1,5,10,8,20,7,4,2,4,5,3,1,19,20]);num.aa();追问

兄弟我这不是要实现去重的功能呀,我是要删除伪数组中指定项

本回答被网友采纳