10
поясни
1+'1' = 11
11-1 = 10
11-1 = 10
1 + '1' = '11'
'11' - 1 = 10
'11' - 1 = 10
Да, ты прав
Эм. А что это за еретическая лексика, в которой string и integer можно так складывать? Или оно само на лету преобразует 1+'1' в 1+StrToInt('1')?
Пусть result=1+'1'
Будет ли разным значение result, если он изначально объявлен как string и если он изначально объявлен как integer?
Пусть result=1+'1'
Будет ли разным значение result, если он изначально объявлен как string и если он изначально объявлен как integer?
Восславим же динамическую типизацию, которая дала нам свободу от оков вечного объявления типа переменных, ведь перед лицом JS-а все равны!
Не динамическая, слабая. В Питоне или Руби нельзя складывать строки и числа без явного преобразования, хотя они динамические.
Нет. Все математические операции приводят операнды к числам... кроме случаев сложения со строкой. Тогда все операнды приводятся к строке.
спасибо что помог понять, теперь я не буду проституткой
Вихлюн, что за херня?
А как он определяет, что операнд это строка, а не число? Анализирует содержимое переменной?
строка взята в кавычки
Да. Проверка типов динамическая, в переменной около значения должна храниться какая-то информация о типе.
Хотя, в случаях, когда переменная не меняет свой тип, компилятор может выкинуть и эту информацию, и проверки. В таких случаях говорят, что на современных движках JS в некоторых случаях работает со скоростью C.
Хотя, в случаях, когда переменная не меняет свой тип, компилятор может выкинуть и эту информацию, и проверки. В таких случаях говорят, что на современных движках JS в некоторых случаях работает со скоростью C.
Добро пожаловать в js
Надеюсь, в инглишь умеешь. Иначе наповал оно тебя не сразит
https://www.destroyallsoftware.com/talks/wat
Надеюсь, в инглишь умеешь. Иначе наповал оно тебя не сразит
https://www.destroyallsoftware.com/talks/wat
Блин, точно! Я видел этот видос. На хабре его постили, по-моему. Смешно, конечно, но кто-то может объяснить ЗАЧЕМ это так сделано в JS? Плюсы какие-то в этом есть? Типа, переменные можно не объявлять. Ну ок. И всё?
В MVS вон тоже можно взять и настроить какой-нибудь Fortran90, что все переменные, которые не объявлены будут real, а все, которые начинаются с "i' и "j" - integer. Удобно, ровно до того момента, как тебе не придётся всё это портировать на другую платформу/компилятор/язык.
В MVS вон тоже можно взять и настроить какой-нибудь Fortran90, что все переменные, которые не объявлены будут real, а все, которые начинаются с "i' и "j" - integer. Удобно, ровно до того момента, как тебе не придётся всё это портировать на другую платформу/компилятор/язык.
у меня ответа нет.
во временя скрипткидствования меня жутко радовало, что можно от строки отнимать или прибавлять числа и при наличии в ней цифр учитывались только они. но сейчас.. блять
иногда бывает хуй угадаешь где балабака зарыта
во временя скрипткидствования меня жутко радовало, что можно от строки отнимать или прибавлять числа и при наличии в ней цифр учитывались только они. но сейчас.. блять
иногда бывает хуй угадаешь где балабака зарыта
В JS переменные нельзя не объявлять. Если не объявлять, они станут глобальными и добавят багов. А в strict mode и вовсе не будет работать - не объявлять вообще нельзя.
Переменные можно не объявлять в python.
В Haskell можно явно не указывать типы, но они сами просчитаются на этапе компиляции с невиданной джаве строгостью, и если что-то не так, программист получит кучу сообщений. В итоге, если исправить ошибки компиляции, программа с большой вероятностью заработает правильно.
Переменные можно не объявлять в python.
В Haskell можно явно не указывать типы, но они сами просчитаются на этапе компиляции с невиданной джаве строгостью, и если что-то не так, программист получит кучу сообщений. В итоге, если исправить ошибки компиляции, программа с большой вероятностью заработает правильно.
За тем, что концепция языка JS подразумевает, что у значений "нет типов" (они скрыты от программистов), а из этого следует что JS никогда не должен давать ошибку приведения типа, а из этого следует что должны быть правила приведения любого типа к любому типу, даже если по смыслу эти приведения полный нонсенс.
Это не самое страшное: я ещё и на Fortran'е пишу.
На заборах?
Фленаган лучше Ванги.
0.3 - 0.1
а это в любых языках проблема, если ты работаешь с двоичными дробями, записанными в десятичной форме (числа с плавающей точкой)
Я знаю, людей удивляет динамическая типизация, но не удивляет неспособность компиляторов разных языков в простую арифметическую конструкцию )
Компиляторы тут ни при чём. Вы, видимо, не понимаете причины возникновения упомянутой вами проблемы. Если, например, написать в C#
decimal x = 0.1M;
decimal y = 0.3M;
return y-x;
то вернётся ровно 0.2, потому что мы записали 0.1 и 0.3 как точные числа, а если написать
double x = 0.1;
double y = 0.3;
return y-x;
то результирующее значение будет _примерно_ равно 0.2 только потому, что x изначально указан как _примерно_ равный 0.1 и у как _примерно_ равный 0.3
decimal x = 0.1M;
decimal y = 0.3M;
return y-x;
то вернётся ровно 0.2, потому что мы записали 0.1 и 0.3 как точные числа, а если написать
double x = 0.1;
double y = 0.3;
return y-x;
то результирующее значение будет _примерно_ равно 0.2 только потому, что x изначально указан как _примерно_ равный 0.1 и у как _примерно_ равный 0.3
ненавижу динамическую типизацию.
Знаете, вот никогда с такими проблемами не сталкивался. Хз, похоже я в JS что-то неправильно делаю.
Кодишь простые проекты или кодишь в одиночку с небольшим кол-вом сторонних библиотек
Чтобы написать коммент, необходимо залогиниться