|
|
|
|
|
JS的every()
方法,是判斷數(shù)組的所有元素是否都符合指定條件,符合就返回true
,不符合就返回false
。
不過不是所有瀏覽器都支持every()
方法,比如低版本的IE瀏覽器(IE8以下)就不支持(IE11則支持)。
如果要讓every()
方法在低版本IE里也有效,那么可以按照本文介紹的方法來處理,我在IE8里親測有效。
every()實(shí)例:檢測所有數(shù)組元素的大小
比如下面的實(shí)例代碼:
//檢測數(shù)組中的所有元素是否都大于 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);
實(shí)例代碼用every()
方法判斷數(shù)組中的所有元素是否都大于10,是就返回true
,否則返回false
。
上述實(shí)例代碼,在Chrome、Firefox,甚至包括IE11等主流瀏覽器,都能正常運(yùn)行。
IE8不支持every()方法
然而,在IE8里,則會(huì)有錯(cuò)誤提示:對(duì)象不支持此屬性或方法。
讓IE8也支持every()的方法
要使代碼能在IE8里有效運(yùn)行,我們可以在前面——注意是要在前面,加上以下代碼:
//這個(gè)代碼一定要放在前面
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里運(yùn)行了。
完整HTML代碼如下:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
//這個(gè)代碼一定要放在前面
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;
};
}
//檢測數(shù)組中的所有元素是否都大于 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
總結(jié)
JS的every()
方法,不是所有瀏覽器都支持,本文介紹了讓該函數(shù)能在不支持的瀏覽器里也正常運(yùn)行的解決方法。
知識(shí)擴(kuò)展——javascript every() 方法詳解
JS的every()
方法,是判斷數(shù)組的所有元素是否都符合指定條件,符合就返回true
,不符合就返回false
。
every()
基本語法:arr.every(callback[, thisArg])
every()
參數(shù)介紹:
every()
方法說明:
every()
方法為數(shù)組中的每個(gè)元素執(zhí)行一次 callback
函數(shù),直到它找到一個(gè)使 callback
返回 false
(表示可轉(zhuǎn)換為布爾值 false
的值)的元素。如果發(fā)現(xiàn)了一個(gè)這樣的元素,every()
方法將會(huì)立即返回 false
。否則,callback
為每一個(gè)元素返回 true
,every()
就會(huì)返回 true
。callback
只會(huì)為那些已經(jīng)被賦值的索引調(diào)用。不會(huì)為那些被刪除或從來沒被賦值的索引調(diào)用。
callback
被調(diào)用時(shí)傳入三個(gè)參數(shù):元素值,元素的索引,原數(shù)組。
every()
不會(huì)改變?cè)瓟?shù)組。
every()
遍歷的元素范圍在第一次調(diào)用 callback
之前就已確定了。在調(diào)用 every()
之后添加到數(shù)組中的元素不會(huì)被 callback
訪問到。如果數(shù)組中存在的元素被更改,則他們傳入 callback
的值是 every()
訪問到他們那一刻的值。那些被刪除的元素或從來未被賦值的元素將不會(huì)被訪問到。