every()
方法測試數組的全部元素是否都經過了指定函數的測試。算法
arr.every(callback[, thisArg])
callback
thisArg
callback
時使用的
this
值。
every
方法爲數組中的每一個元素執行一次 callback
函數,直到它找到一個使 callback
返回 false(表示可轉換爲布爾值 false 的值)的元素。若是發現了一個這樣的元素,every
方法將會當即返回 false
。不然,callback
爲每個元素返回 true
,every
就會返回 true
。callback
只會爲那些已經被賦值的索引調用。不會爲那些被刪除或歷來沒被賦值的索引調用。數組
callback
被調用時傳入三個參數:元素值,元素的索引,原數組。函數
若是爲 every
提供一個 thisArg
參數,在該參數爲調用 callback
時的 this
值。若是省略該參數,則callback
被調用時的 this
值,在非嚴格模式下爲全局對象,在嚴格模式下傳入 undefined
。測試
every
不會改變原數組。this
every
遍歷的元素範圍在第一次調用 callback
以前就已肯定了。在調用 every
以後添加到數組中的元素不會被 callback
訪問到。若是數組中存在的元素被更改,則他們傳入 callback
的值是 every
訪問到他們那一刻的值。那些被刪除的元素或歷來未被賦值的元素將不會被訪問到。spa
下例檢測數組中的全部元素是否都大於 10。prototype
function isBigEnough(element, index, array) { return (element >= 10); } var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true
在第 5 版時,every
被添加進 ECMA-262 標準;所以在某些實現環境中不被支持。你能夠把下面的代碼放到腳本的開頭來解決此問題,該代碼容許在那些沒有原生支持 every
的實現環境中使用它。該算法是 ECMA-262 第5版中指定的算法,假定 Object
和 TypeError
擁有它們的初始值,且 fun.call
等價於Function.prototype.call
。code
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; }; }
some()
方法測試數組中的某些元素是否經過了指定函數的測試。對象
arr.some(callback[, thisArg])
callback
thisArg
this
值。
some
爲數組中的每個元素執行一次 callback
函數,直到找到一個使得 callback 返回一個「真值」(便可轉換爲布爾值 true 的值)。若是找到了這樣一個值,some
將會當即返回 true
。不然,some
返回false
。callback
只會在那些」有值「的索引上被調用,不會在那些被刪除或歷來未被賦值的索引上調用。blog
callback
被調用時傳入三個參數:元素的值,元素的索引,被遍歷的數組。
若是爲 some
提供了一個 thisArg
參數,將會把它傳給被調用的 callback
,做爲 this
值。不然,在非嚴格模式下將會是全局對象,嚴格模式下是 undefined
。
some
被調用時不會改變數組。
some
遍歷的元素的範圍在第一次調用 callback
. 時就已經肯定了。在調用 some
後被添加到數組中的值不會被callback
訪問到。若是數組中存在且還未被訪問到的元素被 callback
改變了,則其傳遞給 callback
的值是some
訪問到它那一刻的值。
下面的例子檢測在數組中是否有元素大於 10。
function isBigEnough(element, index, array) { return (element >= 10); } var passed = [2, 5, 8, 1, 4].some(isBigEnough); // passed is false passed = [12, 5, 8, 1, 4].some(isBigEnough); // passed is true
在第 5 版時,some
被添加進 ECMA-262 標準;這樣致使某些實現環境可能不支持它。你能夠把下面的代碼插入到腳本的開頭來解決此問題,從而容許在那些沒有原生支持它的實現環境中使用它。該算法是 ECMA-262 第 5 版中指定的算法,假定 Object
和 TypeError
擁有他們的初始值,且 fun.call
等價於 Function.prototype.call
。
if (!Array.prototype.some) { Array.prototype.some = 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 true; } return false; }; }
總結:
方法區別
every() 每一項都返回true才返回true
some() 只要有一項返回true就返回true相似&&和||的關係