Array.prototype.takeWhile = function (predicate) {
'use strict';
var $self = this
if (typeof predicate === 'function') {
let flagged = false, matching_count = 0, nomatching_count = 0;
for (let i = 0; i < $self.length; i++) {
let e = $self[i]
if (predicate(e)) {
if (!nomatching_count) {
matching_count++
} else {
flagged = true
break
}
} else {
nomatching_count++
}
}
return !flagged ? $self.slice(0, matching_count) : $self
}
throw new TypeError('predicate must be a function')
};
var test = function() {
var array = [1, 2, 3, 4, 5];
alert(array.takeWhile(x => x <= 3))
};
<button onclick="test()">Click me</button>
の戻り値の型のチェック:predicate
の戻り値の型を確認する方法:
if (typeof predicate === 'function') {
}
私がお聞きしたいですか?
私はこのケースを防ぎたい:その戻り値の型を予測するか、推測する方法はありませんので、
var array = [1, 2, 3, 4, 5];
alert(array.takeWhile(function() {}));
ないこれが可能であることを確認してください。 JavaScript関数は、1回の呼び出しで数値を返し、別の呼び出しで文字列を返すことができます。 –
なぜこれを防ぐ必要がありますか?他の配列メソッドには、これに関するチェックは一切ありません。 – Soviut
@Soviutメッセージには、 '述語は関数でなければなりません'と書かれていますが、 'function(){}'は戻り型のない関数です。 –