Цитата:
|
Цитата:
только если пробел поставить alert(+'2'+ +'1') //3 |
я об этом и говорю, легко опечататься, да и много + сбивает с толку, я предпочитаю не ошибаться там где можно этого не делать. Для меня + тоже что и в php . А точкой в php я типы не привожу.
|
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. |
trikadin,
Зачем расписывать то, что и так очевидно. Демагогию разводишь? Я говорю о том что использование унарного + для приведения строки к числу неоправдано и может приводить к ошибкам замедленного действия, а ты нафига пересказываешь то, что и так понятно? |
Эм... Я, видимо, не совсем тебя понял) Извини... Ну, может кому полезно будет.
Не знаю... Мне кажется, это вопрос размера проекта. Если надо написать одну функцию - то я плюс поставлю (унарный :)). Если десять - то parseFloat, parseInt и т.д. Для большей лёгкости отслеживания ошибок и читаемости кода. |
Если не ошибаюсь были еще такие примеры.
1 - Для проверки определенна ли переменная/метод делать так. var a; if(a !== undefined){ } Я делаю так var a; if(!a){ } 2 - Упоминалось, что склейка строк с помощью join быстрее. На мастер классах Ильи Кантора, тоже что-то про это слышал, но уже забыл. Проверил join, может я не так что-то делаю, но получается медленней var str = '', t1 = +new Date(); for(var i=0;i<10000;i++){ str = ['a',str,'a'].join(''); } var t2 = +new Date(); alert(t2-t1); var str = '', t1 = +new Date(); for(var i=0;i<10000;i++){ str = 'a'+str+'a'; } var t2 = +new Date(); alert(t2-t1); |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
первый пример - 86 второй - 13 Цитата:
Цитата:
var str = '', arr = []; for(var i=0;i<10000;i++){ arr.push('abcdefg'); } t1 = +new Date(); str = arr.join(''); var t2 = +new Date(); alert(t2-t1); |
Часовой пояс GMT +3, время: 02:31. |