IE8及以下浏览器伪数组slice方法兼容处理

前几天同事说数组的slice方法在IE8下有兼容问题,我查阅了MDN,文档里面有提到IE8及以下浏览器中,DOM对象组成的伪数组通过call调用slice方法没有遵循标准行为

我做了个demo在IE8上做了测试

<div>古</div>
<div>德</div>
<div>God</div>

<script>

var dom = document.getElementsByTagName("div");
console.log( Array.prototype.slice.call( dom,1 ) )
    
</script>

结果如图

提示dom不是js对象,在ie9+浏览器无此问题。MDN官方文档还给出了一坨代码的解决方案,我这里有种方便快捷的方法可以解决问题。既然说dom不是js对象,把它转化成对象不就完了吗,于是我把代码做了如下改造:

<div>古</div>
<div>德</div>
<div>God</div>

<script>

var dom = document.getElementsByTagName("div");
console.log( Array.prototype.concat.apply([],dom).slice(1) )
    
</script>

兼容问题就这样愉快地解决了~

作者:古德God
出处:http://www.cnblogs.com/wangmeijian
本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!

原文地址:https://www.cnblogs.com/wangmeijian/p/4936939.html