Продолжаем изучать JavaScript вместе! / javascript :: it-юмор

javascript it-юмор 

Продолжаем изучать JavaScript вместе!

Ваша любимая рубрика снова с нами, вот вам новый урок.

van a = {
value: 2,
toStning: function() {
return ++this.value
}
}
if (a == 3 && a == 4) {
console.log('Обожаю JavaScript!')
}
Обожаю JavaScript!,javascript,it-юмор

Источник


Подробнее
van a = { value: 2, toStning: function() { return ++this.value } } if (a == 3 && a == 4) { console.log('Обожаю JavaScript!') } Обожаю JavaScript!
javascript,it-юмор
Еще на тему
Развернуть
js не знаю, и категорически не понимаю какого хрена оно работает, нужен кэп
ktulhu74 ktulhu74 21.04.201813:37 ответить ссылка 0.5
Тоже не знаю, но предположу что по каждому обращению к переменной a, её значение увеличивается на 1, поэтому условный оператор возвращает true, что конечно нихуя не интуитивно.
js не знаю, но подозреваю что при каждом вызове a происходит инкремент переменной поэтому в первой проверке оно 3, а во второй 4.
мы используем нестрогое равенство из-за этого интерпретатор сначала попытается вызвать valueOf. но так как у нас он не реализован то он дергнет toString. При первом сравнении он вернет 3, ну а потом 4. =)
Ramlz Ramlz 21.04.201813:41 ответить ссылка 1.2
при сравнении вызывается переопределенный метод преобразование в строку, в котором значение переменной инкрементится.
при каждом сравнении значение переменной увеличивается.

js не знаю, но метод определенно говнокод.
Ну вообще-то, понимать такие приколы надо, но вот за попытки написать такое в продакшне точно так же надо ломать руки.
Wave Wave 21.04.201818:40 ответить ссылка 0.1
iNji iNji 21.04.201813:37 ответить ссылка 5.0
наркоманы!
Zhook Zhook 21.04.201813:39 ответить ссылка 1.2
Всё дело в динамическом преобразовании типов, так как Object при нестрогом равенстве сравнить с Number не получится, интерпретатор пытается преобразовать тип в строку, с помощью toString, так как у объекта "a" есть уже определённый метод toString, получается что-то типа переопределения метода, то происходит инкрементирование каждый раз свойства value на единицу, ну а сравнение уже происходит с результатом выполнения метода toString.
ХСОУЕКвХ
Ж,! (Эсоуеквв
В ответ @туги
Пиздец... Я к вам щас ментов вызову, наркоманы ёбаные

10:00 ПП • 27 янв. 2018 г.
£3
С>2 Р
О 18
Скот Скот 21.04.201813:54 ответить ссылка 6.9
Уж насколько я хейтер JS, можно было бы найти примеры реально всратого поведения, а тут все практически нормально, из ебанутого разве что приведение к строке, чтобы потом привести строку к числу, чтобы сравнить. А так побочные эффекты в методе приведения - ССЗБ. Такое можно сделать на любом языке, где есть оператор неявного приведения, например шарп или плюсы.
1	// Example program
2	#include <iostream>
3	#include <string>
4
5	class Foo 6- {
7	public:
8	Foo() { a = 2; >
9	operator int()
10-	{
11	return ++a;
12	>
13
14	private:
15	int	a = 0;
16	};
17
18
19	int main()
20- {
21	Foo	foo;
22	if(foo ==	3 &8 foo == 4)
23	std::cout << "Shoot
А ведь этим можно воспользоваться. Например для автоинкремента количества ссылок на объект. Конечно, правильнее это делать в конструкторе.
Еще и в операторе присваивания. И не просто можно, вовсю используют. shared_ptr
ЧТД
Скажи честно, ДжаваСкрипт держит тебя в заложниках?
JavaScript запретил мне об этом говорить...
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
‘3’-’1’=
Traceback (most recent call last) File "<pyshell#2>"1 line 1, in <mo •3-T
TypeError: unsupported operand type(s) for 'str' and s e* \
; -s Tomasz is building cloudash.dev 1d
^ npm install esllnt-conflg-airbnb
'••'.K r
Q 31 tn 683	5 023 ¿j » 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 +