Один и тот же аргумент функции может принимать разные типы данных?
Извините за простой вопрос. У меня есть эта функция:
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
}
}