Problémy s JavaScript v praxi

Re:Problémy s JavaScript v praxi
« Odpověď #375 kdy: 05. 10. 2018, 17:14:52 »
Kód: [Vybrat]
// @flow
'use strict'

Potom nebudete mať problém s vašimi "neprekonateľnými problémami" s JS. Žiadne == nebude povolené, iba ===, žiadne nesprávne typy odovzdané funkciám, na všetko budete upozornení.

A jak se prosim bez == porovnavaji hodnoty?

Veď je to tam napísané... Pomocou ===?
Takze new String('aa') === new String('aa') zacne zazracne fungovat? Jak tedy potom porovnam identitu objektu? Uz chapes? Timhle jen zakazes nektere hlouposti, ale z blbeho navrhu dobry neudelas.

Jediné zlé je na tom to, že používaš operátor === na to, na čo nie je určený. Na porovnávanie objektov treba použiť Object.is() metódu.

Kód: [Vybrat]
let a = new String('aa')
let b = new String('aa')

console.log(Object.is(a, b))

Dává ten samý výsledek jako === :-).

To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?


BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Problémy s JavaScript v praxi
« Odpověď #376 kdy: 05. 10. 2018, 17:48:14 »
To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?

A to je důvod proč mi přijde to rozlišování objektů a hodnot jako fakt ošklivé. (Jako kdyby null sám o sobě nebylo zvěrstvo.)

eee

Re:Problémy s JavaScript v praxi
« Odpověď #377 kdy: 05. 10. 2018, 17:55:19 »
Kód: [Vybrat]
// @flow
'use strict'

Potom nebudete mať problém s vašimi "neprekonateľnými problémami" s JS. Žiadne == nebude povolené, iba ===, žiadne nesprávne typy odovzdané funkciám, na všetko budete upozornení.

A jak se prosim bez == porovnavaji hodnoty?

Veď je to tam napísané... Pomocou ===?
Takze new String('aa') === new String('aa') zacne zazracne fungovat? Jak tedy potom porovnam identitu objektu? Uz chapes? Timhle jen zakazes nektere hlouposti, ale z blbeho navrhu dobry neudelas.

Jediné zlé je na tom to, že používaš operátor === na to, na čo nie je určený. Na porovnávanie objektov treba použiť Object.is() metódu.

Kód: [Vybrat]
let a = new String('aa')
let b = new String('aa')

console.log(Object.is(a, b))

Dává ten samý výsledek jako === :-).

To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?
Nastuduj si manuál :-).

Re:Problémy s JavaScript v praxi
« Odpověď #378 kdy: 05. 10. 2018, 19:17:02 »
Kód: [Vybrat]
// @flow
'use strict'

Potom nebudete mať problém s vašimi "neprekonateľnými problémami" s JS. Žiadne == nebude povolené, iba ===, žiadne nesprávne typy odovzdané funkciám, na všetko budete upozornení.

A jak se prosim bez == porovnavaji hodnoty?

Veď je to tam napísané... Pomocou ===?
Takze new String('aa') === new String('aa') zacne zazracne fungovat? Jak tedy potom porovnam identitu objektu? Uz chapes? Timhle jen zakazes nektere hlouposti, ale z blbeho navrhu dobry neudelas.

Jediné zlé je na tom to, že používaš operátor === na to, na čo nie je určený. Na porovnávanie objektov treba použiť Object.is() metódu.

Kód: [Vybrat]
let a = new String('aa')
let b = new String('aa')

console.log(Object.is(a, b))

Dává ten samý výsledek jako === :-).

To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?
Nastuduj si manuál :-).

Ja to viem. To ty tvrdíš nezmysel, tak ty mi vysvetli prečo by porovnanie dvoch referencií ukazujúce na dve rozličné miesta v pamäti mali dať true.

andy

Re:Problémy s JavaScript v praxi
« Odpověď #379 kdy: 05. 10. 2018, 19:22:37 »
Ja to viem. To ty tvrdíš nezmysel, tak ty mi vysvetli prečo by porovnanie dvoch referencií ukazujúce na dve rozličné miesta v pamäti mali dať true.
No..fakt to nevíš...


Re:Problémy s JavaScript v praxi
« Odpověď #380 kdy: 05. 10. 2018, 21:39:37 »
Ja to viem. To ty tvrdíš nezmysel, tak ty mi vysvetli prečo by porovnanie dvoch referencií ukazujúce na dve rozličné miesta v pamäti mali dať true.
No..fakt to nevíš...

Hm. Ok, tak mi to vysvetli.

agent

Re:Problémy s JavaScript v praxi
« Odpověď #381 kdy: 05. 10. 2018, 22:56:51 »
Poslední porovnání null >= 0 vrátí  true.

Protože >= se chová jinak než ==
Vynutí si přetypování null na number (pro jiné typy nemá >= smysl), což je 0  :)

Co

agent

Re:Problémy s JavaScript v praxi
« Odpověď #382 kdy: 05. 10. 2018, 23:07:27 »
Na téhle stránce dole je tabulka popisující výsledku přetypování různých hodnot na number, string a bool.
https://www.w3schools.com/js/js_type_conversion.asp
Přiznám se že některé konverze mě také překvapily, samy o sobě smysl dávají, ale moc konzistence tam není  :D
Ještě, že se to v praxi obvykle nepoužívá.

eee

Re:Problémy s JavaScript v praxi
« Odpověď #383 kdy: 06. 10. 2018, 06:27:48 »
Poslední porovnání null >= 0 vrátí  true.

Protože >= se chová jinak než ==
Vynutí si přetypování null na number (pro jiné typy nemá >= smysl), což je 0  :)

Přesně, ale měl jsi ho nechat, aby si na to přišel sám, pak by pochopil, jak je JS nekonzistentně navržený a dává hloupé výsledky. Protože není úplně podstatné, zda se null považuje za větší, rovný nebo menší než 0, ale v dobře navrženém jazyku musí napříč tímto jazykem ve všech případech dávat konzistentní odpověď. A u JS tomu tak v mnohých případech není. A i když je to popsané, je to prostě špatně.

eee

Re:Problémy s JavaScript v praxi
« Odpověď #384 kdy: 06. 10. 2018, 06:53:20 »
To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?
Nastuduj si manuál :-).
Ja to viem. To ty tvrdíš nezmysel, tak ty mi vysvetli prečo by porovnanie dvoch referencií ukazujúce na dve rozličné miesta v pamäti mali dať true.

Nevíš, odpověděl jsi špatně. To ty mi vysvětli, proč je to v jednom případě true.

Všimni si, jak se tu prezentuješ, jako expert na JS, s ohromnými zkušenostmá, my ostatní jsme blbečci, co si nedokážou ani přečíst nebo pochopit manuál. Píšeš nám tu urážky jako Happy coding, ovce ;).

A pak selžeš na jednoduché otázce, na kterou by i podprůměrný programátor dokonce i kdejaký začátečník v normálním srozumitelném a předvídatelném jazyce odpověděl s jistotou a to bez nahlížení kamkoliv.

Takže si vyber, buď jsi totální hňup, s kterým nemá smysl cokoliv řešit, protože neovládáš ani naprosté základy a to i navzdory upozornění na chybu a nebo holt je JS špatně navržený jazyk a jeho používání je procházka po minovém poli, kde i expert na JS se čas od času plete v základech jazyka a neumí s jistotou předvídat jeho chování.

Já osobně, ač používám JS od časů Netscape a IE4, tedy dřevních dob kdy vznikal, a znám hodně jeho špeků, nemám v něm jistotu a poustu věcí si musím pořád zkoušet a ověřovat, protože JS je nepředvídatelný. A proto říkám, je to špatně navržený jazyk. Navíc nedostatečný pro spolehlivé programování a zajištění ne aby program nespadl, ale aby neudělal něco, co nemá (k čemuž stačí jedna blbě vyhonocená podmínka, nebo že projde nějaký nesmysl, na kterém by každý slušný jazyk vyvolal výjimku). Pohybuji se v průmyslovém prostředí náročném na bezpečnost a je to na palici. Dobře polovina kódu jsou kontroly navíc nutné oproti jiným jazykům. JS je jazyk vhodný pro blogýsky, kde vcelku o nic nejde, pro náročnější použití je nedostatečný, bohužel nemá alternativu.

Fernet

Re:Problémy s JavaScript v praxi
« Odpověď #385 kdy: 06. 10. 2018, 07:50:13 »
I když to není 100% alternativa, tak tohle vypadá moc zajímavě.
https://shift.infinite.red/phoenixs-liveview-client-side-elixir-at-last-2280716ae791

oss

Re:Problémy s JavaScript v praxi
« Odpověď #386 kdy: 06. 10. 2018, 09:40:09 »
To prostě neokecáš a mám v zásobě spoustu dalších špeků, třeba tento je také povedený.


null == 0
null === 0
null > 0
null >= 0


Kdo si tipne výsledeky?  :-)

Iste, že je to false. Veď porovnávaš referencie na dva rôzne objekty v pamäti. Čo iné by to akože malo dať?
Nastuduj si manuál :-).
Ja to viem. To ty tvrdíš nezmysel, tak ty mi vysvetli prečo by porovnanie dvoch referencií ukazujúce na dve rozličné miesta v pamäti mali dať true.

Nevíš, odpověděl jsi špatně. To ty mi vysvětli, proč je to v jednom případě true.

Všimni si, jak se tu prezentuješ, jako expert na JS, s ohromnými zkušenostmá, my ostatní jsme blbečci, co si nedokážou ani přečíst nebo pochopit manuál. Píšeš nám tu urážky jako Happy coding, ovce ;).

A pak selžeš na jednoduché otázce, na kterou by i podprůměrný programátor dokonce i kdejaký začátečník v normálním srozumitelném a předvídatelném jazyce odpověděl s jistotou a to bez nahlížení kamkoliv.

Takže si vyber, buď jsi totální hňup, s kterým nemá smysl cokoliv řešit, protože neovládáš ani naprosté základy a to i navzdory upozornění na chybu a nebo holt je JS špatně navržený jazyk a jeho používání je procházka po minovém poli, kde i expert na JS se čas od času plete v základech jazyka a neumí s jistotou předvídat jeho chování.

Já osobně, ač používám JS od časů Netscape a IE4, tedy dřevních dob kdy vznikal, a znám hodně jeho špeků, nemám v něm jistotu a poustu věcí si musím pořád zkoušet a ověřovat, protože JS je nepředvídatelný. A proto říkám, je to špatně navržený jazyk. Navíc nedostatečný pro spolehlivé programování a zajištění ne aby program nespadl, ale aby neudělal něco, co nemá (k čemuž stačí jedna blbě vyhonocená podmínka, nebo že projde nějaký nesmysl, na kterém by každý slušný jazyk vyvolal výjimku). Pohybuji se v průmyslovém prostředí náročném na bezpečnost a je to na palici. Dobře polovina kódu jsou kontroly navíc nutné oproti jiným jazykům. JS je jazyk vhodný pro blogýsky, kde vcelku o nic nejde, pro náročnější použití je nedostatečný, bohužel nemá alternativu.

To, ked je exkrement opisany v dokumentacii este neznamena, ze je to torta.
Je to objedktivne zle vymysleny jazyk, ktory prinasa problemy komunite, programatorom. V dospliych jazykoch sa take veci proste nedeju.
A to nezmeni ani tvoja arogancia ani nadavky.

owwwar

Re:Problémy s JavaScript v praxi
« Odpověď #387 kdy: 06. 10. 2018, 10:22:53 »
Má to určitá na první pohled nejasná místa, ale teď upřímně - jak často sčítáte objekty s řetězci? Nebo porovnáváne nully s čísly? Použili jste vůbec někdy v životě new String()? Aniž bych to chtěl nějak bagatelizovat, tak většina toho, co uvádíte jako nepřekonatelný problém, jsou těžce okrajové případy.

Re:Problémy s JavaScript v praxi
« Odpověď #388 kdy: 06. 10. 2018, 11:51:40 »
Na některé už mě nebaví stále reagovat, nerad házím hrách o zeď. Nicméně je pozoruhodné, že <nadsázka> jeden týden tu není dost dobrý návrh Haskellu, další týden není dost dobrý návrh JavaScriptu... <ironie> (obojí perfektně vyargumentováno) ještě štěstí, že tu máme ten dobře navržený Python </ironie></nadsázka>. :)

eee

Re:Problémy s JavaScript v praxi
« Odpověď #389 kdy: 06. 10. 2018, 15:03:49 »
Má to určitá na první pohled nejasná místa, ale teď upřímně - jak často sčítáte objekty s řetězci? Nebo porovnáváne nully s čísly? Použili jste vůbec někdy v životě new String()? Aniž bych to chtěl nějak bagatelizovat, tak většina toho, co uvádíte jako nepřekonatelný problém, jsou těžce okrajové případy.
Null s čísly neporovnáváš záměrně, ale může k tomu občas dojít nechtěně. I když ty osobně nepoužiješ new String(), může ti to do programu lézt z řady použitých knihoven, a když ne hned, tak třeba po její aktualizaci a tím se ti najednou nepředvídatelně změní chování důležitého programu. Takže si to potom všechno musíš pořád ručně kontrolovat na spoustě míst, abys měl jistotu, že se ti to nestane.