Совместимость типов данных

Если сложить два числовых значения? Правильно, еще одно числовое значение. А если сложить число и строку? Тут интерпретатор JavaScript сталкивается с проблемой несовместимости типов данных. И пы­тается сделать эти типы совместимыми, преобразуя один из них к другому. В нашем случае, число будет преобразовано в строку, и потом две получен­ные строки — слиты в одну:

var a, b, с; а = 11; b = "12"; с = а + b;

Значение переменной а будет преобразовано в строковый тип — "И". Таким образом, переменная с будет содержать значение "1112" — результат слияния этих двух строк.

Теперь рассмотрим следующий пример:

var a, b, с;

а = 11; b = "12"; с = а — b;

В этом случае интерпретатор преобразует значение переменной ь в числовое значение— 12. И результатом вычисления выражения, помещенным в пе­ременную с, станет — 1.

Как видите, интерпретатор JavaScript делает все, чтобы выполнить вашу программу. Иногда это хорошо, но часто оказывает программистам медвежью услугу: программа работает не так, как планировалось, или, в конце концов, останавливается по ошибке совсем в другом месте, на абсолютно верном операторе. Поэтому лучше всего не допускайте подобных казусов, оперируйте только переменными совместимых типов и выполняйте преобразование типов сами. Как это делается, мы рассмотрим позднее, когда будем изучать объекты языка JavaScript.

Оператор typeof

Оператор typeof принимает в качестве операнда переменную или выражение и возвращает строку, описывающую тип данных операнда. Если операнд имеет численный тип (целый или с плавающей точкой), возвращается строка "number", если строковый тип, то "string", а для логического типа — "boolean". Если же переменная вообще не содержит данных (была объявлена оператором var, но значение так и не было присвоено) или выражение возвращает неопределенный результат (из-за неудачного преобразования типов), возвращается "undefined".

Оператор typeof имеет следующий формат.

typeof({Выражение})

Рассмотрим несколько примеров использования этого оператора.

if typeof(a +1) == "number" f = typeof(somevar);

В последнем случае мы присваиваем результат оператора typeof перемен­ной f. Помните, что он имеет строковый тип.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: