01.07.2011, 20:56
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от Kolyaj
|
Нет. Теперь тут инкремент
|
Нет, как раз подойдет. В этом весь смысл. ^^
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
01.07.2011, 22:26
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Gozar
|
Нет, как раз подойдет.
|
SyntaxError
только если пробел поставить
alert(+'2'+ +'1') //3
|
|
01.07.2011, 23:49
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
я об этом и говорю, легко опечататься, да и много + сбивает с толку, я предпочитаю не ошибаться там где можно этого не делать. Для меня + тоже что и в php . А точкой в php я типы не привожу.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
01.07.2011, 23:58
|
|
Модератор
|
|
Регистрация: 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.
Последний раз редактировалось trikadin, 02.07.2011 в 00:01.
|
|
02.07.2011, 00:13
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
trikadin,
Зачем расписывать то, что и так очевидно. Демагогию разводишь? Я говорю о том что использование унарного + для приведения строки к числу неоправдано и может приводить к ошибкам замедленного действия, а ты нафига пересказываешь то, что и так понятно?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
02.07.2011, 00:24
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Эм... Я, видимо, не совсем тебя понял) Извини... Ну, может кому полезно будет.
Не знаю... Мне кажется, это вопрос размера проекта. Если надо написать одну функцию - то я плюс поставлю (унарный ). Если десять - то parseFloat, parseInt и т.д. Для большей лёгкости отслеживания ошибок и читаемости кода.
|
|
09.07.2011, 22:04
|
|
NodeJS developer - ушел
|
|
Регистрация: 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.
|
|
09.07.2011, 22:32
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от mycoding
|
Проверил join, может я не так что-то делаю, но получается медленней
|
В данном примере у меня (Opera 11.50) join быстрее в 10 раз.
|
|
09.07.2011, 22:33
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от mycoding
|
Для проверки определенна ли переменная/метод делать так.
|
А на запустить в своих же примерах нажать?
Сообщение от mycoding
|
Проверил join, может я не так что-то делаю, но получается медленней
|
Нужно не три строки 10000 раз склеить, а 10000 строк склеить.
|
|
10.07.2011, 09:55
|
|
NodeJS developer - ушел
|
|
Регистрация: 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.
|
|
|
|