Всё логично.
+ для JS это по умолчанию конкатенация. Пытаемся привести всех участников к строке.
- математическая операция. По возможности пытаемся привести всех участников операции к числу.
К слову сказать:
'5' + - 2 => '5-2'
+ '5' + - 2 => 3
Во втором случае первый плюс воспринимается как присвоения знака, и соответственно строка, по возможности, приводится к числу.
Просто у вас нормального жабаскрипта не было!
Я еще года два назад нос ворочал от JS, а сейчас это один из моих любимых языков! Как мне не хватает некоторых его возможностей в джаве и шарпе...
Я вот недавно начал учить JS после PHP, тяжеловато, но терпимо. Мне вот интересно, когда знаешь несколько языков, которые довольно сильно отличаются между собой, не путаешся постоянно или со временем это проходит?
После пхп что угодно жестью будет. Люди, начавшие путь программера с пхп полностью потеряны для общества.
someObect->getSomeString."rightconcatenatedstring" <-- блять что ЭТО? Кто придумывал этот ебучий язык?!
а вот еще момент. Лет 5 не писал на С, лет 8 на в.бэйсике. Совсем не помню сейчас, что там и как. А раньше зарабатывал ими.
Ну я сейчас тоже пилю сервер на джаве, бд на оракле, клиент. При том в клиенте и верстаю сам (суки верстаки заебали говно подсовывать!). Плюс дома на шарпе и немношко на дельфи (совсем немношко). Так что по сути полностью одновременно на java + js + css3 + html5 + plsql.
Не путаться помогает хорошая IDE (как же мне не хватает нормальной иде для оракла!).
Ну как... Если я сейчас снова сяду за дельфи или плюсы - я буду по началу путаться.
Но я сейчас активно пишу на джаве, шарпе и джаваскрипте (ну и плюс хранимые процедуры oracle sql). В принципе не путаюсь (только иногда в джаве ссылочное сравнение по инерции ставлю как ===).
я путаюсь часто с горячими клавишами при дебаге. чуть ли ни ежедневно по работе переключаюсь между IntelliJ IDEA, Visual Studio и Dev Tools в хроме и у них у всех разные хоткеи... вот это проблема
Я когда-то давно плотно сидел на эклипсе. Теперь у меня во всех средах разработки стоят хоткеи от эклипса. В идее там вообще есть пресет от эклипса, донастраивать минимум.
Я как бы шарп, джава(нескрипт) и немного веб программист... Наоборот, в шарпе есть много того, чего в джаваскрипте нет. Но шарп покрывает возможности JS полностью.
Что насчет подмены функций существующего объекта и т.д.?
Все, что касается динамики реализовано в шарпе очень уныло.
Что за подмена функций существующего объекта? Делегаты? Функции как параметр другой функции? То бишь колбэки, ты их имеешь ввиду?
Нет. Подмена функции как таковой. Что-то вроде x.prototype.func = function() { somethingElse(); x.prototype.func(); }
Не таким образом, но есть. Делегаты. По сути, это параметр, который что-то делает в себе, прежде чем вернуть результат (или не вернуть - void).
Нечто вроде
delegate object[] Blabla(object[] objs); // самый универсальный делегат, который можно придумать
object[] someFunc(object[] obj)
{
object[] result = new object[2];
if (obj.length > 0)
{
result[0] = "ok";
result[1] = obj[0] + obj[1];}
else result[0] = "notOk";
return result;
}main()
{
Blabla blabla = someFunc;
Console.WriteLine(((blabla()[0] as String).equals("ok"))?(blabla()[1] as String):"WTF?!");
// вернет ВТФ?!
Console.WriteLine(((blabla(1,2)[0] as String).equals("ok"))?(blabla()[1] as String):"WTF?!");
// вернет 3
/* тут можно blabla присвоить другую функцию и так же вызвать blabla(). И я почти уверен, что функции можно прямо в тексте программы писать, но хз как, ибо не пользовался никогда такими извращениями. И приведенным извращением тоже не пользовался. Вообще делегаты юзал всего один раз в жизни, ибо интерфейсы их для моих задач полностью заменяют.*/
}
Перед изучением языков типа JS/Ruby/PHP/Perl в принципе рекомендуется изучить один из этих - Java/C++/Python.
Рекомендуется гуглом.
https://www.google.com/about/careers/students/guide-to-techn...
Как человек, который перед тем как освоить свой первый высокоуровневый язык гонял плюсы/пролог/вба/ассемблер, согласен.
Во втором случае первый плюс используется в качестве операции приведения типа. Это официально задокументированная возможность.
> Number("-2")
-2
логично с точки зрения пользователя языка, или дизайнера отстаивающего логичность своего творения?
К примеру при создании обьекта с прототипом копируются (неявно) все данные, кроме... массивов.
child.f = func(); // child only
child.n = 5; // child onlychild.a.push(6); // every single object
child.n = []; // child and his childs
child.n.push(5); // child and his childs
Логично, массивы ведь по ссылке отдаются.
Оператор + из-за строчного операнда слева будет ломиться делать конкатенацию. И сделает её, несмотря на то что правый операнд будет намбером (в результате работы оператора "-").
Так-то вроде и понятно...
Но вот в языке со строгой типизацией пришлось бы написать:
'5' + '-' + '2'
И в таком варианте не только машине, но и человеку становится сразу ясно, что здесь происходит.
Чуть-чуть не так. Выражение конкатенации у оператора "+" имеет бОльший приоритет, чем выражение математической суммы.
Потому что оператор "+" в качестве оператора приведения типа имеет еще больший приоритет. В таком режиме он работает если левого операнда нет.
По-моему вы усложняете. Это просто унарный плюс (как и в остальных языках) и т.к. он применим только к числам - строка приводится к числу. Нет операторов приведения типов
В си-подобных языках оператор "плюс" используется и как оператор конкатенации строк, причем приоритет конкатенации выше, чем приоритет сложения.
да нет у них "приоритетов", есть порядок разбора выражения. если первый операнд строка, значит плюс рассматривается как оператор конкатенации.
и наоборот
очень хорошо такие вещи начинаешь понимать раскуривая питон. там наглядно и просто можно формировать поведение операторов для любых комбинаций типов слева и справа. в сях тоже можно перегружать операторы, но это душно и скучно
https://msdn.microsoft.com/ru-ru/library/z3ks45k7(v=vs.94).a...
Это не питон. Это ООП. Не надо, пожалуйста, приводить пародии на языки в качестве примеров для описания работы языков.
PS: Лично мне кажется, что раскуривать коровью лепешку куда более полезное действие, чем раскуривание питона. Ваш комментарий это наглядно показывает.
И еще один очередной смелый и разговорчивый господин меня в игнор добавил. Горе, сильное горе.
Чувак, ты добавил меня в игнор, и сидишь обновляешь страницу, чтобы прочитать, что я написал? Где ебаная логика?..

