博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么indexOf在数组IE8上不起作用?
阅读量:2288 次
发布时间:2019-05-09

本文共 4180 字,大约阅读时间需要 13 分钟。

本文翻译自:

The below function works fine on Opera, Firefox and Chrome. 以下功能在Opera,Firefox和Chrome上正常运行。 However, in IE8 it fails on the if ( allowed.indexOf(ext[1]) == -1) part. 但是,在IE8中,它在if ( allowed.indexOf(ext[1]) == -1)部分失败。

Does anyone know why? 有人知道为什么吗? Is there any obvious mistake? 有没有明显的错误?

function CheckMe() {    var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');    var fileinput=document.getElementById('f');    var ext = fileinput.value.toLowerCase().split('.');    if ( allowed.indexOf(ext[1]) == -1)     {        document.getElementById('uploadsec').innerHTML = document.getElementById('uploadsec').innerHTML;        alert('This file type is not allowed!');    }}

#1楼

参考:


#2楼

Please careful with $.inArray if you want to use it. 如果要使用$ .inArray,请小心。 I just found out that the $.inArray is only works with "Array", not with String. 我刚刚发现$ .inArray仅适用于“ Array”,不适用于String。 That's why this function will not working in IE8! 这就是为什么此功能在IE8中不起作用的原因!

The jQuery API make confusion jQuery API令人困惑

The $.inArray() method is similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't find a match. $ .inArray()方法类似于JavaScript的本机.indexOf()方法,因为它找不到匹配项时返回-1。 If the first element within the array matches value, $.inArray() returns 0 如果数组中的第一个元素匹配值,则$ .inArray()返回0

--> They shouldn't say it "Similar". ->他们不应该说“类似”。 Since indexOf support "String" also! 由于indexOf支持“字符串”也!


#3楼

If you're using jQuery and want to keep using indexOf without worrying about compatibility issues, you can do this : 如果您使用的是jQuery并希望继续使用indexOf而不用担心兼容性问题,则可以执行以下操作:

if (!Array.prototype.indexOf) {    Array.prototype.indexOf = function(val) {        return jQuery.inArray(val, this);    };}

This is helpful when you want to keep using indexOf but provide a fallback when it's not available. 当您想继续使用indexOf但在不可用时提供后备功能时,这很有用。


#4楼

You can use this to replace the function if it doesn't exist: 您可以使用它来替换该函数(如果不存在):


#5楼

The problem 问题

IE<=8 simply doesn't have an method for arrays. IE <= 8根本没有用于数组的方法。


The solution 解决方案

If you need indexOf in IE<=8, you should consider using the following , which is : 如果您需要IE <= 8中的indexOf ,则应考虑使用以下 ,这是 :

if (!Array.prototype.indexOf) {    Array.prototype.indexOf = function(searchElement, fromIndex) {        var k;        if (this == null) {            throw new TypeError('"this" is null or not defined');        }        var o = Object(this);        var len = o.length >>> 0;        if (len === 0) {            return -1;        }        var n = +fromIndex || 0;        if (Math.abs(n) === Infinity) {            n = 0;        }        if (n >= len) {            return -1;        }        k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);        while (k < len) {            if (k in o && o[k] === searchElement) {                return k;            }            k++;        }        return -1;    };}

Minified : 缩小:

Array.prototype.indexOf||(Array.prototype.indexOf=function(r,t){var n;if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),i=e.length>>>0;if(0===i)return-1;var a=+t||0;if(Math.abs(a)===1/0&&(a=0),a>=i)return-1;for(n=Math.max(a>=0?a:i-Math.abs(a),0);i>n;){if(n in e&&e[n]===r)return n;n++}return-1});

#6楼

Versions of IE before IE9 don't have an function for Array, to define , run this before trying to use it: IE9之前的IE版本没有用于Array的函数,以定义 ,请在尝试使用它之前运行它:

if (!Array.prototype.indexOf){  Array.prototype.indexOf = function(elt /*, from*/)  {    var len = this.length >>> 0;    var from = Number(arguments[1]) || 0;    from = (from < 0)         ? Math.ceil(from)         : Math.floor(from);    if (from < 0)      from += len;    for (; from < len; from++)    {      if (from in this &&          this[from] === elt)        return from;    }    return -1;  };}

This is the version , used in Firefox/SpiderMonkey. 这是的版本,在Firefox / SpiderMonkey中使用。 In other cases such as IE, it'll add in the case it's missing... basically IE8 or below at this point. 在其他情况下,例如IE,它会在丢失的情况下添加 ...此时基本上是IE8或更低版本。

转载地址:http://rwjnb.baihongyu.com/

你可能感兴趣的文章
JVM 实战学习总结:JVM 的分代模型:年轻代、老年代、永久代
查看>>
面试官:聊聊 Spring 中的线程安全性
查看>>
一篇文教你在 Java 中利用 redis 实现分布式全局唯一标识服务
查看>>
深入浅出数据库事务和4种隔离级别
查看>>
对限频限流的思考
查看>>
15天内4面阿里,成功拿下offer,分享个人面经
查看>>
万字长文,带你深入浅出五种负载均衡策略。
查看>>
详解:java工具之解析yaml文件
查看>>
包教包会:搭建RocketMQ双主双从同步集群,
查看>>
5年Java程序员,五面蚂蚁险拿offer定级P7,大厂面试不过如此?
查看>>
大厂面试必问!HashMap 怎样解决hash冲突?
查看>>
面试屡屡碰壁,痛定思痛闭关修炼!半年后4面阿里成功拿offer
查看>>
最全的大厂最新面试249题与笔记总结:多线程+JVM +Spring+微服务+分布式+Redis+MySQL
查看>>
吊!设计模式全解:6大设计原则+23种设计模式+设计模式PK+设计模式混编
查看>>
服!看完阿里大牛手写的Java异步编程实战笔记,我惊呆了
查看>>
Java程序员跳槽,三面之后被拒,原因竟是“招不起”
查看>>
想要彻底搞懂微服务架构?必先学:SpringBoot+SpringCloud+docker
查看>>
6天面试10家,已经拿到offer,Java程序员的面试总结分享
查看>>
渣本的逆袭之路!备战3个月,三面蚂蚁金服成功斩获Offer
查看>>
10月末美团、滴滴、蘑菇街9次面试总结(Java岗)
查看>>