Один и тот же аргумент функции может принимать разные типы данных?

Извините за простой вопрос. У меня есть эта функция:

function(var1){ 
    var myString =var1;
    //  myString is parsed for integers 
}

Нужно ли всегда вызывать аргумент как строку? например

function("23")

Или я могу безопасно смешивать и сочетать? например

function(23);
function("string with number 23");

5 ответов

Решение

Да, вы можете передавать разные типы данных, так как Javascript - это язык с динамической типизацией. если вы хотите другое поведение в зависимости от типа данных, вы можете использовать instanceof,

Как это:

function f(var1) {
    if(var1 instanceof String) {
        // handle strings
    } else if(var1 instanceof Object) {
        // handle objects
    } else if(var1 instanceof Date) {
        // handle dates
    }
}

Это также может быть использовано для фильтрации / проверки входных данных.

Обновление: обратите внимание на комментарий @jakeclarkson относительно разницы между instanceof а также typeof операторы.

Вы можете смешивать и сопоставлять - до тех пор, пока ваш целочисленный анализатор настроен для работы со смесью.

Вы можете использовать любой из этих способов, если хотите, чтобы число было целым числом, а для какой-то математики не ставили речевые метки.

Если вы передаете число в виде строки, вы всегда можете использовать

parseInt("string");

Вы можете передать любой тип данных, который вы хотите, в функцию. Это просто важно, как вы используете аргументы.

краткий ответ: ДА

Длинный ответ: проверка типов - реальная проблема в JavaScript. Это становится только сложнее, если вы начнете пытаться различать массивы и объекты.

Я бы использовал функцию typeOf Крокфорда, которую можно найти здесь

Однако, если вы планируете передавать только строки или числа, это должно быть сделано:

function (var1) {
   if (typeof var1 === "number"){
     //treat it like a number
   } else if (typeof var1 === "string") {
     //try to parse it
   } else {
     //Its neither a string nor a number
   }
}
Другие вопросы по тегам