Решил написать эту статью, т.к. иногда в констукции
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
, т.к. это два разных объекта.
Комментариев нет:
Отправить комментарий