Создавая JavaScript_выражения, необходимо обращать внимание на типы дан_ ных, передаваемых операторам, и на типы данных, которые они возвращают. Различные операторы требуют, чтобы операнды возвращали значения опреде_ ленного типа. Например, нельзя выполнить умножение строк, поэтому выраже_ ние "a" * "b" не является допустимым в JavaScript. Однако интерпретатор Java_ Script по мере возможности будет пытаться преобразовывать выражение в тре_ буемый тип, поэтому выражение "3" * "5" вполне допустимо. Его значением будет число 15, а не строка "15". Более подробно о преобразованиях типов в JavaScript рассказывалось в разделе 3.12.
Некоторые операторы ведут себя по_разному в зависимости от типа операндов. Самый яркий пример – оператор +, который складывает числовые операнды
и выполняет конкатенацию строк. Кроме того, если ему передать одну строку
и одно число, он преобразует число в строку и выполнит конкатенацию двух по_ лученных строк. Например, результатом выражения "1" + 0 будет строка "10".
Обратите внимание, что операторы присваивания, как и некоторые другие, тре_ буют в качестве выражений в левой части левостороннего значения (lvalue). Ле_ востороннее значение – это исторический термин, обозначающий «выражение, которое может присутствовать в левой части оператора присваивания». В Java_ Script левосторонними значениями являются переменные, свойства объектов и элементы массивов. Спецификация ECMAScript разрешает встроенным функ_ циям возвращать левосторонние значения, но не определяет никаких встроен_ ных функций, ведущих себя подобным образом.
И наконец, операторы не всегда возвращают значения того же типа, к которому принадлежат операнды. Операторы сравнения (меньше, равно, больше и т. д.) принимают в качестве аргументов различные типы, но всегда возвращают ре_ зультат логического типа, показывающий, истинно ли сравнение. Так, выраже_ ние a < 3 возвращает значение true, если значение переменной a действительно меньше, чем 3. Как мы увидим, логические значения, возвращаемые оператора_ ми сравнения, используются в инструкциях if, циклах while и for, управляю_ щих в JavaScript исполнением программы в зависимости от результатов вычис_ ления выражений с операторами сравнения.