手写Array.prototype.every
May 24, 2020
前端知识复习 code snippet
- Let O be ? ToObject(this value).
- Let len be ? LengthOfArrayLike(O).
- If IsCallable(callbackfn) is false, throw a TypeError exception.
- Let k be 0.
Repeat, while k < len,
- Let Pk be ! ToString(k).
- Let kPresent be ? HasProperty(O, Pk).
If kPresent is true, then
- Let kValue be ? Get(O, Pk).
- Let testResult be ! ToBoolean(? Call(callbackfn, thisArg, « kValue, k, O »)).
- If testResult is true, return false.
- Set k to k + 1.
- Return true.
代码
Array.prototype.myEvery = function (callbackfn, thisArg) {
if (this == undefined) {
throw TypeError('Cannot read property filter of ' + this);
}
if (typeof callbackfn !== 'function') {
throw TypeError(callbackfn + ' is not a function');
}
var O = Object(this);
var len = O.length >>> 0;
for (var k = 0; k < len; k++) {
if (k in O) {
var kValue = O[k];
if (!callbackfn.call(thisArg, kValue, k, O)) return false;
}
}
return true;
};