javascript :: it-юмор

it-юмор javascript 
it-юмор,javascript
Подробнее

it-юмор,javascript
Еще на тему
Развернуть
10
поясни
1+'1' = 11
11-1 = 10
1 + '1' = '11'
'11' - 1 = 10
Да, ты прав
DavaScript...
...буду проституткой
Niissoks Niissoks 17.06.201823:12 ответить ссылка 18.0
Эм. А что это за еретическая лексика, в которой string и integer можно так складывать? Или оно само на лету преобразует 1+'1' в 1+StrToInt('1')?
Пусть result=1+'1'
Будет ли разным значение result, если он изначально объявлен как string и если он изначально объявлен как integer?
Восславим же динамическую типизацию, которая дала нам свободу от оков вечного объявления типа переменных, ведь перед лицом JS-а все равны!
Не динамическая, слабая. В Питоне или Руби нельзя складывать строки и числа без явного преобразования, хотя они динамические.
Нет. Все математические операции приводят операнды к числам... кроме случаев сложения со строкой. Тогда все операнды приводятся к строке.
спасибо что помог понять, теперь я не буду проституткой
Вихлюн, что за херня?
да ладно тебе, тут есть целый свой бордель в аноне
А как он определяет, что операнд это строка, а не число? Анализирует содержимое переменной?
MapPoo MapPoo 17.06.201823:28 ответить ссылка 0.0
строка взята в кавычки
Это в исходном коде только. На этапе исполнения уже с гигантской вероятностью их уже нет.
С точки зрения интерпретатор JS у всех значений есть типы, просто они скрыты от программиста. Когда вызывается операция, требующая определённых типов, то значения неявно приводятся к этим типам. К сожалению полные правила определения какие типы нужны и приведения к этим типам в JS представляют из себя огромные простыни сложных условий, которые фиг найдёшь в интернете, и никто никогда их не помнит, за исключением нескольких отдельных частовстречающихся сценариев, к которым, в том числе, относится сложение и вычитание строк с числами.
Можешь все-таки в двух словах объяснить зачем такие сложности? Все эти неявные фичи, скрытые от программиста, нужны для того, чтобы облегчить сам код, сделать его проще и снизить порог вхождения или есть какой-то глубокий функциональный смысл в этом?
Изначальный смысл - снизить порог вхождения. Типа "не будем грузить людей типами, JS сам разберётся что вы хотели написать". Но любая попытка разрабатывать на JS что-нибудь действительно сложное мгновенно аукается необходимостью самостоятельно отслеживать типы (и не только их), резко задирая планку сложности разработки стабильного и легко обслуживаемого кода.
изначальный смысл - сделать предельный минимум критичных ошибок. потому в JS можно и на ноль делить, обращаться к несуществующим свойствам объектов, в ветках условий обращаться к несуществующим переменным и т.п.
если бы скрипты JS работали как программы на других языках - у нас бы постоянно валились сайты, не работала анимация и аякс из-за кривых баннеров или адблоков. а так - ну, не сработал кусок кода как нужно из-за неполученных данных - и хуй с ним, выполняемся дальше, не критично: пользователь информацию прочитать может, в БД ничего не пишется, при перезагрузке страницы скорей всего будет ок.
Да. Проверка типов динамическая, в переменной около значения должна храниться какая-то информация о типе.
Хотя, в случаях, когда переменная не меняет свой тип, компилятор может выкинуть и эту информацию, и проверки. В таких случаях говорят, что на современных движках JS в некоторых случаях работает со скоростью C.
Добро пожаловать в js
Надеюсь, в инглишь умеешь. Иначе наповал оно тебя не сразит
https://www.destroyallsoftware.com/talks/wat
Блин, точно! Я видел этот видос. На хабре его постили, по-моему. Смешно, конечно, но кто-то может объяснить ЗАЧЕМ это так сделано в JS? Плюсы какие-то в этом есть? Типа, переменные можно не объявлять. Ну ок. И всё?
В MVS вон тоже можно взять и настроить какой-нибудь Fortran90, что все переменные, которые не объявлены будут real, а все, которые начинаются с "i' и "j" - integer. Удобно, ровно до того момента, как тебе не придётся всё это портировать на другую платформу/компилятор/язык.
у меня ответа нет.
во временя скрипткидствования меня жутко радовало, что можно от строки отнимать или прибавлять числа и при наличии в ней цифр учитывались только они. но сейчас.. блять
иногда бывает хуй угадаешь где балабака зарыта
Я пишу иногда скрипты на одной херне, у неё даже названия нет. Это какая-то такая смесь дельфей и матлабовского языка. Может, и от JS там что-то есть. но я JS не знаю, так что мне трудно понять.
Так вот, там тоже переменные можно вообще не объявлять, но (почти) всегда понятно какого типа переменная у тебя получилась: что в неё первое записалось, такого типа она и будет.
Вот это вот реально очень удобно.
В JS переменные нельзя не объявлять. Если не объявлять, они станут глобальными и добавят багов. А в strict mode и вовсе не будет работать - не объявлять вообще нельзя.
Переменные можно не объявлять в python.
В Haskell можно явно не указывать типы, но они сами просчитаются на этапе компиляции с невиданной джаве строгостью, и если что-то не так, программист получит кучу сообщений. В итоге, если исправить ошибки компиляции, программа с большой вероятностью заработает правильно.
Если переменные не объявлять, то они интерпретируются как поля глобального объекта.
За тем, что концепция языка JS подразумевает, что у значений "нет типов" (они скрыты от программистов), а из этого следует что JS никогда не должен давать ошибку приведения типа, а из этого следует что должны быть правила приведения любого типа к любому типу, даже если по смыслу эти приведения полный нонсенс.
ManKey ManKey 17.06.201823:51 ответить ссылка 4.3
Это не самое страшное: я ещё и на Fortran'е пишу.
На заборах?
И в лифтах!
Фленаган лучше Ванги.
0.3 - 0.1
liberum liberum 17.06.201823:01 ответить ссылка -2.0
а это в любых языках проблема, если ты работаешь с двоичными дробями, записанными в десятичной форме (числа с плавающей точкой)
Я знаю, людей удивляет динамическая типизация, но не удивляет неспособность компиляторов разных языков в простую арифметическую конструкцию )
Компиляторы тут ни при чём. Вы, видимо, не понимаете причины возникновения упомянутой вами проблемы. Если, например, написать в 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
Psyhco Psyhco 18.06.201800:15 ответить ссылка 1.9
ненавижу динамическую типизацию.
AnoHito AnoHito 18.06.201804:10 ответить ссылка -1.0
Знаете, вот никогда с такими проблемами не сталкивался. Хз, похоже я в JS что-то неправильно делаю.
symfic symfic 18.06.201804:20 ответить ссылка 0.0
Кодишь простые проекты или кодишь в одиночку с небольшим кол-вом сторонних библиотек
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
e* \
; -s Tomasz is building cloudash.dev 1d
^ npm install esllnt-conflg-airbnb
'••'.K r
Q 31 tn 683	5 023 ¿j »и	ТТгТ	lJ ■ R т-^И • ■	nTiiÏÏK'H'lilH		i I 11	тш
г		П[»]|	I Г* I ■ . V Я 1 I I в	/»Il 1	хйшТ	Щ
ж		Пш	Hií»lMhHHil!	|Д7	ijTTT	[¡iff » 4 in l <- false
Programmer Memes
@iammemeloper
Without a doubt, the best programming language
11:09 PM -Sep28, 2023 121.6K ¡ews
» let l = [1,2,3,4]
<- undefined
» 0 in l <- true
» "0" in l <- true
подробнее»

javascript языки программирования программирование geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор javascript programming languages programming geek

» 4 in l <- false Programmer Memes @iammemeloper Without a doubt, the best programming language 11:09 PM -Sep28, 2023 121.6K ¡ews » let l = [1,2,3,4] <- undefined » 0 in l <- true » "0" in l <- true
>	X = undefined
<• undefined
>	Math.sin(x)
<•
de	nd
n f u e d u id f e ne	in
+
подробнее»

it javascript

> X = undefined <• undefined > Math.sin(x) <• de nd n f u e d u id f e ne in +