@campus1

Как сделать проверку NaN?

Привет ребят. Делаю задачку, в которой надо переписать встроенный метод includes в массивах.

Делаю так:
Array.prototype.newInclude = function(element, index) {
    let startIndex = index || 0,
        arr = this.slice(startIndex);

    for (let i = 0; i < arr.length; i++) {
        if (element === arr[i] || isNaN(arr[i]) && isNaN(element)) {
            return true;
        }
    }
    return false;
}


С числами все хорошо выходит, а вот со строчками не очень.
Результат:
['a','b'].newInclude('a') // true
['a','b'].newInclude('e') // true
, то есть все символы дают true. Я понимаю что это через isNaN, но где мне подправить?
isNaN - здесь потому что я хотел добится результатa:
[1,2,3,NaN].newInclude(NaN) // => true

Спасибо всем!
  • Вопрос задан
  • 1462 просмотра
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Вот исправленный вариант https://jsfiddle.net/5zqfno0x/
Тут используется особенность NaN, которая заключается в том, что
NaN !== NaN // true

Еще вариант с использованием Number.isNaN вместо isNaN https://jsfiddle.net/gz2onxrh/
Но Number.isNaN это спецификация ES6. Функция не поддерживается IE11 и другими старыми браузерами.

Проблема функции isNaN в том что она сначала конвертирует аргумент в число и строки содержащие что угодно помимо числел и пробелов, объекты, undefined превращаются в NaN
isNaN(undefined); // true
isNaN({});   // true
isNaN('test');  // true
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы