js every()方法IE不支持的解决方法【亲测有效】
作者:admin 时间:2022-4-22 13:57:39 浏览:JS的every()方法,是判断数组的所有元素是否都符合指定条件,符合就返回true,不符合就返回false。
不过不是所有浏览器都支持every()方法,比如低版本的IE浏览器(IE8以下)就不支持(IE11则支持)。
如果要让every()方法在低版本IE里也有效,那么可以按照本文介绍的方法来处理,我在IE8里亲测有效。
every()实例:检测所有数组元素的大小
比如下面的实例代码:
//检测数组中的所有元素是否都大于 10
function isBigEnough(element, index, array) {
return(element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false
console.log(passed);
alert(passed);
passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true
console.log(passed);
alert(passed);
实例代码用every()方法判断数组中的所有元素是否都大于10,是就返回true,否则返回false。
上述实例代码,在Chrome、Firefox,甚至包括IE11等主流浏览器,都能正常运行。
IE8不支持every()方法
然而,在IE8里,则会有错误提示:对象不支持此属性或方法。

让IE8也支持every()的方法
要使代码能在IE8里有效运行,我们可以在前面——注意是要在前面,加上以下代码:
//这个代码一定要放在前面
if(!Array.prototype.every) {
Array.prototype.every = function(fun /*, thisArg */ ) {
'use strict';
if(this === void 0 || this === null) throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if(typeof fun !== 'function') throw new TypeError();
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for(var i = 0; i < len; i++) {
if(i in t && !fun.call(thisArg, t[i], i, t)) return false;
}
return true;
};
}
这样,every()方法就可以在IE8里运行了。
完整HTML代码如下:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
//这个代码一定要放在前面
if(!Array.prototype.every) {
Array.prototype.every = function(fun /*, thisArg */ ) {
'use strict';
if(this === void 0 || this === null) throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if(typeof fun !== 'function') throw new TypeError();
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for(var i = 0; i < len; i++) {
if(i in t && !fun.call(thisArg, t[i], i, t)) return false;
}
return true;
};
}
//检测数组中的所有元素是否都大于 10
function isBigEnough(element, index, array) {
return(element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false
console.log(passed);
alert(passed);
passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true
console.log(passed);
alert(passed);
</script>
</body>
</html>
输出:
false
true
总结
JS的every()方法,不是所有浏览器都支持,本文介绍了让该函数能在不支持的浏览器里也正常运行的解决方法。
知识扩展——javascript every() 方法详解
JS的every()方法,是判断数组的所有元素是否都符合指定条件,符合就返回true,不符合就返回false。
every() 基本语法:
arr.every(callback[, thisArg])
every()参数介绍:

every()方法说明:
every()方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 false(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every()方法将会立即返回 false。否则,callback 为每一个元素返回 true,every()就会返回 true。callback 只会为那些已经被赋值的索引调用。不会为那些被删除或从来没被赋值的索引调用。
callback 被调用时传入三个参数:元素值,元素的索引,原数组。
every() 不会改变原数组。
every() 遍历的元素范围在第一次调用 callback 之前就已确定了。在调用 every() 之后添加到数组中的元素不会被 callback 访问到。如果数组中存在的元素被更改,则他们传入 callback 的值是 every() 访问到他们那一刻的值。那些被删除的元素或从来未被赋值的元素将不会被访问到。



