如何为InternetExplorer浏览器修复JavaScript中的Array indexOf

如何为InternetExplorer浏览器修复JavaScript中的Array indexOf

如果您使用过任何长度的JavaScript,那么您就知道InternetExplorer没有为Array.Prototype.indexOf()[包括InternetExplorer 8]实现ECMAScript函数。这不是一个大问题,因为您可以使用以下代码扩展页面上的功能。

Array.prototype.indexOf = function(obj, start) {
     for (var i = (start || 0), j = this.length; i < j; i++) {
         if (this[i] === obj) { return i; }
     }
     return -1;}

我应该在什么时候实现这一点?

我是否应该用下面的检查将它包装在我的所有页面上,检查Prototype函数是否存在,如果不存在,那么继续扩展Array Prototype吗?

if (!Array.prototype.indexOf) {

    // Implement function here}

或者进行浏览器检查,如果它是InternetExplorer,那么只需实现它?

//Pseudo-codeif (browser == IE Style Browser) {

     // Implement function here}


尚方宝剑之说
浏览 453回答 3
3回答

largeQ

这样做.。if&nbsp;(!Array.prototype.indexOf)&nbsp;{}如MDC推荐的兼容性.一般来说,浏览器检测代码是一个大的不-不。

梦里花落0921

或者,您可以使用jQuery1.2 inArray函数,它应该跨浏览器工作:jQuery.inArray(&nbsp;value,&nbsp;array&nbsp;[,&nbsp;fromIndex&nbsp;]&nbsp;)

繁星淼淼

那么,完整的代码将是:if&nbsp;(!Array.prototype.indexOf)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Array.prototype.indexOf&nbsp;=&nbsp;function(obj,&nbsp;start)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;(start&nbsp;||&nbsp;0),&nbsp;j&nbsp;=&nbsp;this.length;&nbsp;i&nbsp;<&nbsp;j;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this[i]&nbsp;===&nbsp;obj)&nbsp;{&nbsp;return&nbsp;i;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;}}要获得真正彻底的答案和代码,以及其他数组函数,请查看堆栈溢出问题。在InternetExplorer(indexOf、forEach等)中修复JavaScriptArray函数.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript