Почему не верно срабатывает проверка на тип данных?

215
20 апреля 2017, 16:55
function myFunc(myNumber) {
    if (typeof Number != myNumber){
        alert("Вы передали не Number");
        return myNumber
    }
    else{
        return 10 + myNumber;
    }
}
var myNumber = 10;
myNumber = myFunc(myNumber);
console.log(myNumber);
Answer 1

Ну для начала давайте разберемся с тем, что конструкторы стандартных типов не являются этими самыми типами как в других языках. Они все являются функциями-прототипами. И уже в свою очередь возвращают нужный объект.

Поскольку они все являются функциями, то сравнивать их по типу с чем-то кроме функций бессмысленно.

Вам правильно сказали почитать документацию по typeof, это ключевое слово возвращает строку с названием типа. Поэтому даже если бы Number был числом, то получили бы в итоге строку.

Сравнение строки с числом тоже ничего нормального не даст. Правильный вариант перевести само число в тип и сравнить.

"number" != typeof myNumber

Ну и полный код

function myFunc(myNumber) { 
    if ("number" != typeof myNumber){ 
        alert("Вы передали не Number"); 
        return myNumber 
    } 
    else{ 
        return 10 + myNumber; 
    } 
} 
 
var myNumber = 10; 
myNumber = myFunc(myNumber); 
console.log(myNumber);

Answer 2

Когда вы сравниваете

typeof Number != myNumber

Вы сравниваете функцию (typeof Number) с числом. Как написали выше, вам нужно определить тип переменной.

function myFunc(myNumber) {
  console.log(typeof myNumber);
    if (typeof myNumber !== "number"){
        alert("Вы передали не Number");
        return myNumber;
    }
    else{
        return 10 + myNumber;
    }
}
var myNumber = 10;
myNumber = myFunc(myNumber);
console.log(myNumber);
READ ALSO
Форма без preventDefault отправляется, а с preventDefault не отправляется. Что делать?

Форма без preventDefault отправляется, а с preventDefault не отправляется. Что делать?

Есть форма, которая должна отправляться без перезагрузки, для этого я использую такой jquery код:

299
Настраиваемый аудиоплеер на Javascript

Настраиваемый аудиоплеер на Javascript

Я перерыл штук 100 разных плееров в гугл, но это что-то смешноеЯ был уверен что легко найду много библиотек для использования, а не смог найти...

256
Восстановить структура кода JS | CSS | HTML

Восстановить структура кода JS | CSS | HTML

Все время привожу код в строчку и всегда имел под рукой online сервисы для восстановления структуры- Были проблемы с компом и все сервисы потерял

284
Строгое кол-во объектов на странице

Строгое кол-во объектов на странице

доброе время сутокЕсть необходимость на странице отрисовать в строку(строка примерно 25-30px в высоту) 30 элементов(объектов)

170