У меня есть кусок кода, который проверяет равенство массивов. Он работает как шарм при использовании как:
[1, 2, 3].equals([1, 2, 3]); // true
[1, 2, 3].equals([1, 2, 4]); // false
Приведенный выше результат очевиден и верен, конечно. Тем не менее, следующий случай завершается ошибкой:
[1, 2, undefined].equals([1, 2, undefined]);
// Error: Cannot read property 'equals' of undefined
Что может быть причиной этого? Я проверяю, есть ли у него свойство, перед тем как его использовать (if (this[i].equals)
), так почему он так говорит? Также верно, что undefined === undefined
, поэтому я не вижу, в чем проблема.
Функция:
Array.prototype.equals = function(arr) {
if (this.length !== arr.length) {
return false;
}
for (var i = 0; i < arr.length; i++) {
if (this[i].equals) {
if (!this[i].equals(arr[i])) {
return false;
} else {
continue;
}
}
if (this[i] !== arr[i]) {
return false;
}
}
return true;
}