Показать сообщение отдельно
  #14 (permalink)  
Старый 01.07.2011, 23:58
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Gozar, унарный плюс перед строкой, равно как и унарный минус, приводит её к числу. Аналогично все бинарные операции приводят свои операнды к числам. И строки не являются исключением. Исключением в этом плане является бинарный плюс, который конкатенирует операнды, если хотя бы один из них - строка. Операторы инкремента/декремента, как префиксные, так и постфиксные, также приводят оператор к числу.

Все ваши примеры прекрасно подходят под то, что я сейчас сказал:

alert('2'+'1');        // конкатенация, оба оператора - строки, т.е. результат - 21, строка
alert('2'+'1'*1);     // конкатенация. Левый оператор - строка, правый приводится к числу, умножается на единицу, потом приводится к строке и конкатенирует со строкой "2". Результат - 21, строка.
alert('2'*1+'1'*1);  // оба оператора приводятся к числам, умножаются на единицу, и складываются. Результат - 3, число.
alert('2'-'1');     // оба оператора приводятся к числам, и из левого вычитается правый. Результат - 1, число.
alert((+'2')+(+'1')); // оба оператора приводятся к числам с помощью унарного плюса и складываются. Результат - 3, число.
alert(+'2'++'1') // строка "2", приводится к числу. Строка "1" приводится к числу и инкрементирует. Фактически, данный пример аналогичен такому: 
alert(2++1) // я думаю, никого не удивляет, почему тут ошибка.


P. S. Естественно, что всё это действует только в JS.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)

Последний раз редактировалось trikadin, 02.07.2011 в 00:01.
Ответить с цитированием