Определение типа данных в JavaScript: число или строка
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для быстрого определения числа или строки взгляните на результат работы оператора typeof
в JavaScript:
let varNum = 42, varStr = "hello";
let isNumber = typeof varNum === 'number'; // true – если число, иначе false
let isString = typeof varStr === 'string'; // true – если строка, иначе false
Оператор typeof
значительно облегчает задачу идентификации типов данных.
Ограничения оператора 'typeof'
Отметим, что оператор typeof
не является универсальным. Например, typeof new String('asdf')
выдаст 'object'
. Для более аккуратной проверки типов string
и number
используется Object.prototype.toString
:
let isTrueString = Object.prototype.toString.call(varStr) === '[object String]'; // самый надёжный способ проверки строк
let isTrueNumber = Object.prototype.toString.call(varNum) === '[object Number]'; // безупречное распознавание числа
Для исключения NaN
, Infinity
и -Infinity
из числовых значений используется Number.isFinite(value)
:
let varInfinity = Infinity;
let isFiniteNumber = Number.isFinite(varNum); // возвращает true только для конечных чисел
Когда нужно определить, является ли строка числовой, используйте регулярное выражение:
let isNumericString = /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(varStr); // проверяет, является ли строка числовой
"Серые места" JavaScript
JavaScript не всегда предельно очевиден. Справиться с числовыми строками и строками, содержащими числа, поможет преобразование типов с использованием функции parseFloat
и isNaN
:
let isNumberCasted = !isNaN(parseFloat(varStr)) && isFinite(varStr); // определение числа в строке
Не забывайте, что NaN
— это единственное значение в JavaScript, которое не равно самому себе. Неравенство varNum !== varNum
намекнет вам на наличие NaN
.
Визуализация
Разгадка того, является ли значение числом или строкой, напоминает детективное расследование:
Чтобы разобраться с 'x':
1. Используем `typeof`:
`typeof x === 'number'` → 📊 Отлично: это число!
`typeof x === 'string'` → 📜 Прекрасно: это строка!
2. Пробуем применить `isNaN`:
`!isNaN(x)` → 💡 Это число!
3. Применяем `parseFloat`:
`x == parseFloat(x)` → 🔍 Найдено закрытое число!
**Тайна раскрыта**: все элементы головоломки собраны, 'x' раскритикован.
Помните:
typeof
— ваш первый ассистент.isNaN
— надёжный визави.parseFloat
— искатель замаскированных чисел.
Применяя эти инструменты, вы успешно справитесь с головоломками типов данных в JavaScript!
Обработка реальных ситуаций
В практических задачах важно уметь различать числа и строки для корректного управления данными. Вот несколько типичных примеров:
1. Обработка данных формы
function validateInput(input) {
return Number.isFinite(+input) || input.trim().length > 0; // надёжная валидация пользовательского ввода
}
Эта функция аттестует правильность данных формы, проверяя, является ли значение конечным числом или непустой строкой.
2. Обработка данных JSON
Часто в данных JSON строки маскируются под числа. Чтобы раскрыть их истинное лицо:
function coerceType(value) {
if (!isNaN(value) && value !== '') {
return +value; // обнажаем внутреннее число
}
return value;
}
Такая функция помогает почистить строковые представления чисел и вернуть их к первоначальному числовому облику.
3. Интерпретация ввода пользователя
Порядок сортировки введенных данных зависит от их типа:
function sortByType(a, b) {
let aIsNumber = typeof a === 'number';
let bIsNumber = typeof b === 'number';
if (aIsNumber && bIsNumber) {
return a – b; // числа сравниваются просто
} else if (!aIsNumber && !bIsNumber) {
return a.localeCompare(b); // строки сортируются лексикографически
}
return aIsNumber ? -1 : 1;
}
В примере выше числа и строки упорядочиваются согласно своим местам в итоговом расположении.
Паломничество к underscore.js
Для облегчения жизни разработчикам библиотека underscore.js
предлагает метод _.isString(obj)
, который умеет определить строки:
let isUnderscoreString = _.isString(varStr); // underscore.js сообщит нам, что перед нами именно строка
Такой "утиной" подход к типизации позволяет выявить, ведет ли себя объект как строка, на основе его методов или свойств.
Полезные материалы
- typeof – JavaScript | MDN — документация по оператору
typeof
. - JavaScript typeof — обучающее пособие по
typeof
. - Detecting an "invalid date" Date instance in JavaScript – Stack Overflow — дискуссия о датах и типах в JavaScript.
- Преобразования типов — детальное рассмотрение преобразований между строками и числами.
- ECMAScript® 2024 Language Specification — официальная спецификация языка о числовых преобразованиях.
- JavaScript: The World's Most Misunderstood Programming Language — Дуглас Крокфорд о сложностях понимания JavaScript.
- Medium: JavaScript Type Checking with TypeScript — использование TypeScript для проверки типов.