Array.prototype.every()
概述
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
不會改變原數組。
every
遍歷的元素范圍在第一次調用 callback
之前就已確定了。在調用 every
之后添加到數組中的元素不會被 callback
訪問到。如果數組中存在的元素被更改,則他們傳入 callback
的值是 every
訪問到他們那一刻的值。那些被刪除的元素或從來未被賦值的元素將不會被訪問到。
實例
例子:檢測所有數組元素的大小
下例檢測數組中的所有元素是否都大於 10。
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
兼容舊環境(Polyfill)
在第 5 版時,every
被添加進 ECMA-262 標准;因此在某些實現環境中不被支持。你可以把下面的代碼放到腳本的開頭來解決此問題,該代碼允許在那些沒有原生支持 every
的實現環境中使用它。該算法是 ECMA-262 第5版中指定的算法,假定 Object
和 TypeError
擁有它們的初始值,且 fun.call
等價於Function.prototype.call
。
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; }; }
Array.prototype.some()
概述
some()
方法測試數組中的某些元素是否通過了指定函數的測試。
語法
arr.some(callback[, thisArg])
參數
-
callback
- 用來測試每個元素的函數。
-
thisArg
-
執行 callback 時使用的
this
值。
描述
some
為數組中的每一個元素執行一次 callback
函數,直到找到一個使得 callback 返回一個“真值”(即可轉換為布爾值 true 的值)。如果找到了這樣一個值,some
將會立即返回 true
。否則,some
返回false
。callback
只會在那些”有值“的索引上被調用,不會在那些被刪除或從來未被賦值的索引上調用。
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
兼容舊環境(Polyfill)
在第 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
類似&&和||的關系