Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 01.07.2011, 20:56
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Kolyaj Посмотреть сообщение
Нет. Теперь тут инкремент
Нет, как раз подойдет. В этом весь смысл. ^^
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #12 (permalink)  
Старый 01.07.2011, 22:26
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Gozar
Нет, как раз подойдет.
SyntaxError
только если пробел поставить
alert(+'2'+ +'1') //3
Ответить с цитированием
  #13 (permalink)  
Старый 01.07.2011, 23:49
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

я об этом и говорю, легко опечататься, да и много + сбивает с толку, я предпочитаю не ошибаться там где можно этого не делать. Для меня + тоже что и в php . А точкой в php я типы не привожу.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #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.
Ответить с цитированием
  #15 (permalink)  
Старый 02.07.2011, 00:13
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

trikadin,
Зачем расписывать то, что и так очевидно. Демагогию разводишь? Я говорю о том что использование унарного + для приведения строки к числу неоправдано и может приводить к ошибкам замедленного действия, а ты нафига пересказываешь то, что и так понятно?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #16 (permalink)  
Старый 02.07.2011, 00:24
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Эм... Я, видимо, не совсем тебя понял) Извини... Ну, может кому полезно будет.

Не знаю... Мне кажется, это вопрос размера проекта. Если надо написать одну функцию - то я плюс поставлю (унарный ). Если десять - то parseFloat, parseInt и т.д. Для большей лёгкости отслеживания ошибок и читаемости кода.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #17 (permalink)  
Старый 09.07.2011, 22:04
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Если не ошибаюсь были еще такие примеры.
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);

Последний раз редактировалось mycoding, 10.07.2011 в 09:56.
Ответить с цитированием
  #18 (permalink)  
Старый 09.07.2011, 22:32
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от mycoding
Проверил join, может я не так что-то делаю, но получается медленней
В данном примере у меня (Opera 11.50) join быстрее в 10 раз.
Ответить с цитированием
  #19 (permalink)  
Старый 09.07.2011, 22:33
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от mycoding
Для проверки определенна ли переменная/метод делать так.
А на запустить в своих же примерах нажать?


Сообщение от mycoding
Проверил join, может я не так что-то делаю, но получается медленней
Нужно не три строки 10000 раз склеить, а 10000 строк склеить.
Ответить с цитированием
  #20 (permalink)  
Старый 10.07.2011, 09:55
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сообщение от B@rmaley.e><e Посмотреть сообщение
В данном примере у меня (Opera 11.50) join быстрее в 10 раз.
У меня в Chrome
первый пример - 86
второй - 13

Сообщение от Kolyaj Посмотреть сообщение
А на запустить в своих же примерах нажать?
Подправил.

Сообщение от Kolyaj Посмотреть сообщение
Нужно не три строки 10000 раз склеить, а 10000 строк склеить.
Понял

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);

Последний раз редактировалось mycoding, 10.07.2011 в 09:57.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Книга] Stoyan Stefanov, Javascript Patterns Dmitry A. Soshnikov Учебные материалы 20 13.08.2013 11:37
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Москва, ищу JavaScript программиста отлично знающего ExtJS, от 10 USD / час. maximgb Работа 3 03.08.2010 14:34
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24