Поиск по этому блогу

Показаны сообщения с ярлыком типы. Показать все сообщения
Показаны сообщения с ярлыком типы. Показать все сообщения

пятница, 15 июня 2012 г.

Определение является ли переменная числом на javascript

Как определить является ли переданная переменная числом или нет? Есть встроенные функции, но все они дают неоднозначные результаты. При этом функция должна быть максимально простой и кросс-платформенной. Для этого лучше всего подходит следующий код: !isNaN(parseFloat(n)) && isFinite(n);
из всех возможных комбинаций и вариантов цифр он определяет наибольшее количество верно.

Сравнение переменных разных типов в javascript и возможные баги

Решил написать эту статью, т.к. иногда в констукции if () else могут возникнуть ошибки при сравнении переменных разных типов (вернее, не ошибки, а непониание работы интерпретатора). Время на поиск которых может быть несоизмеримым со временем написания данной статьи. Приведу пример сравнения массива и строки:
//Такой пример введет кого угодно в замешательство, но он хорошо отображает суть вопроса
> ",,," == Array(4)
//Вернет true
Если ввести данную команду в консоли вы получите положительный результат (true). Дело в том, что операция сравнения приводит выражения по обе стороны оператора сравнения к единому типу. В данном случае Пустой массив приводится к строковому типу: ",,," - четыре пустых элемента, разделенных запятыми (по умолчанию, элементы массива в javascript разделены запятыми). Для проверки этого можно ввести в консоль следующие примеры:
> Array(4).toString();
//Вернет ",,,"
> ['a','b','c'].toString();
//Вернет "a,b,c"
Во избежание таких ситуаций нужно использовать оператор эквивалентности: "===". В случае сравнения переменной простого типа и объекта к объекту применяется функция ToPrimitive(), которая возвращает значение по умолчанию для объекта это значение возвращаемое методом DefaultValue().

Оператор эквивалентности при работе с объектами javascript

Замечание касательно работы оператора эквивалентности состоит в том, что если проверяются на эквивалентность два объекта, то фактически проверяется эквивалентность их ссылок, поэтому, код: new String("a") !== new String("a") вернет false, т.к. это два разных объекта.