- NTFS, exFAT, FAT32 – Melyiket válaszd és miért?
- Házimozi haladó szinten
- ThinkPad (NEM IdeaPad)
- Nem tetszik a Procon-SP-nek, hogy a Nintendo távolról kivégezheti a Switch 2-t
- E-book olvasók
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Mikrokontrollerek Arduino környezetben (programozás, építés, tippek)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Otthoni időjárás-állomás
- VR topik
-
PROHARDVER!
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
válasz
Mr Dini #6184 üzenetére
Egyebkent irtad hogy a pythonban az a jo, hogy van egy hasznos lib amivel konnyu http requesteket csinalni, es hogy ez js-ben hianyzik. Na ez pl annyira nem igaz, hogy par sornyi kodbol tudsz csinalni egy alkalmazast amiben ennyi a request resz (t.k ugyanaz amit te is mutattal) https://preview.c9users.io/mogyibogyi/promo/client/js/main.js
Az alkalmazas fajljai: https://preview.c9users.io/mogyibogyi/promo/
Demo: https://promo-mogyibogyi.c9users.ioBtw: nyilvan linkelni is lehetett volna egy fetch polyfillt de az too-lame
-
Jim-Y
veterán
válasz
Mr Dini #6184 üzenetére
Szia, gondoltam, annyi a megoldas, hogy az index.html-t ne csak siman megnyisd a bongeszoben, hanem egy webszerverrel szolgald ki. A legegyszerubb, ha bemesz abba a konyvtarba ahol a fajlod van es
python -m SimpleHTTPServer .
Majd a bongeszodben:localhost:8000
forras: [link] De akar node-al is siman meg lehet csinalni par sornyi kodbol es ott meg CORS-ot is tudsz allitani ha kene. -
Jim-Y
veterán
válasz
topjoyy #6123 üzenetére
Ez egy határozott nem. Ha egyedül dolgozol egy projekten akkor igazából azt csinálsz amit akarsz, akkor kontroll karakterekkel is írhatod az egész kódot ha neked úgy tetszik vagy használhatsz egy betűs változóneveket. Ellenben majd ha lesz munkahelyed akkor más szabályok lesznek érvényesek. Corporate környezetben az a jó kód ami magáért beszél. Magáért az a kód beszél ami jó/leíró függvényneveket tartalmaz, jó (hosszú) változóneveket, sok kommentet. Úgy kell megírni a kódot, hogy ha a kisjóskapista 2 hét múlva odaül a kódod elé akkor rögtön bele tudjon nyúlni, megértse, hogy mit miért és miért úgy csináltál. Egy komolyabb projekten minifikálják a kódot és még mangling is van így tényleg semmi értelme tömör kódot írni. Értsd zéró.
-
Jim-Y
veterán
válasz
topjoyy #6120 üzenetére
És akkor ebből azt szűrted le, hogy ez a kód jó? Ami rövidebb, meg érted az egyből jó kód is? Ebből csak arra akarok rávilágítani, hogy lehet, hogy te ezt most megértetted, meg jajdejó rövidebb, de attól még egy interjún egy ilyen kóddal nem mennél át. De nem akarok további flamewarokat indítani, tényleg nem. Peace
-
Jim-Y
veterán
válasz
fordfairlane #6108 üzenetére
Én úgy vagyok ezzel, hogy van aki csak az adott problémát akarja megoldani, hogy hogy lehet a "Lemon" piros az oldalon, meg van aki jó szakember szeretne lenni, én az utolsót céloztam meg, és úgy írtam neki a linkeket.
-
Jim-Y
veterán
válasz
fordfairlane #6106 üzenetére
Ja értem, szoval akkor ne vegyük komolyan a "jelentkezőt"/kérdezőt? Én csakis úgy segítettem neki mint amennyire én is örülnék neki ha valaki nekem segítene fordított esetben. Most érted, a legjobb tudomásunk szerint segítünk neki, ellátjuk hasznos anyagokkal, akár még többel is mint amire szüksége van, de felnőtt ember, el tudja dönteni, hogy a sok forrás közül neki mire van szüksége, mire van ideje stb. Inkább legyen miből választania, minthogy olyan választ kapjon, hogy ---> http://lmgtfy.com/?q=google
-
Jim-Y
veterán
válasz
topjoyy #6099 üzenetére
Nincs. Ha programozni szeretnél akkor tanulj meg angolul, ha nem tudsz angolul akkor ne tanulj programozni hanem tanulj meg előbb angolul. Tényleg. Nem azért mondom, mert rosszat akarok, sőt. Ez olyan, hogy ha vizimentő szeretnél lenni akkor nem árt ha tudsz úszni, ha nem tudsz úszni akkor gyakorolhatod te a nyakonátfogást betonon, de ha élesben kell alkalmaznod a mentést akkor majd jön a csalódás, hogy nem tudsz úszni.
-
Jim-Y
veterán
Lejárt:
Ezekről kéne tudni, hogy mit jelentenek
ES5 Array methods
Closure
Events / Event handling
bind
Callback
Error first style
Callback hell
Promises / Deferreds
IIFE
editorconfig, jshint, strict mode
js unit testing, jasmine, karma
== vs ===
automatic type coercion
typeof, {}.prototype.toString
prototypal inheritance, mixin inheritance
apply, call vagy ES6 -> restparams, spread op.
passing a function object as a reference to another function -> event handlers
ajax
localStorage, sessionStorage
devTools
data-bindingCsak ismerni:
frameworks (Angular, Ember, Backbone, React+Flux, Meteor)
isomorphism -
Jim-Y
veterán
válasz
topjoyy #6096 üzenetére
A w3schools még nemrégiben az egyik lehető legrosszabb tanulási forrásnak számított -> http://www.w3fools.com/. Ha tanulni szeretnél megannyi forrásból választhatsz,
Kezdésnek ezt olvasd el: http://shamansir.github.io/JavaScript-Garden/en/
Majd ezt: https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript?redirectlocale=en-US&redirectslug=JavaScript%2FA_re-introduction_to_JavaScript
Ha ezen túl vagy akkor meg: http://javascriptissexy.com/how-to-learn-javascript-properly/Ha követed itt amiket minden héten ajánl: codecademy meg hasonlók akkor egy nagyon átfogó tudást szerezhetsz Javascriptből.
HTML + DOM: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Introduction
CSS: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started
-
Jim-Y
veterán
válasz
topjoyy #6092 üzenetére
Szia, ez így több sebből is vérzik. Kezdem az elejéről.
- Oké, hogy valami online tutorialt követsz, de inline esemény kezelőket használni már 5 éve is deprecated volt. Adj egy id-t a gombnak és aggassz rá megfelelő eseményvezérlőt.
- ne innerHTML-el szúrd be az elemeket, hanem csinálj mindegyiknek egy container-t így később egyszerűbb lesz stílusokkal ellátni őket
Csináltam egy példát és adtam commenteket is. Lehet sokkal töb kódból lett megoldva a probléma de legalább nem deprecated technikákat használ: https://jsfiddle.net/fwuyLec8/
Megj: a te példáddal csak úgy simán nem lehet megoldani a stílust, mindenképp kell egy DOM elem ami tartalmazza a tömb egy aktuális elemét, és arra a DOM elemere már lehet stílust tenni.
-
Jim-Y
veterán
Igen, sajnos a tömb és objektum duplikálásra nincsenek szép megoldások. A stringify + parse módszer amit mutattál akkor lehet problémás ha körkörös hivatkozás van a struktúrában, az angular.copy lassú és a elemenkénti másolással dolgozik (asszem). ES6-ban van Object.assign, vagy ott a spread operator, de az meg talán csak 1 mélységig működik. Tömbök másolására ott a .slice(), de az pedig ha a tömb elemei objektumok,mint a te esetedben is, akkor azokat nem másolja le hanem csak a referenciát másolja át. Nem egyszerű na, de hát minden nyelvben vannak kevésbé jó dolgok, így javascriptben is
Amúgy ennek a "problémának" amivel most találkoztál semmi köze a javascripthez a legtöbb nyelv így működik, hogy vannak primitív érték szerinti tipusok és a referencia tipusok. Nincs ez máshogy JS-ben sem, ennyi
-
Jim-Y
veterán
Üdv,
Szerintem browserify nem kell mert a systemjs azt production módban megoldja. Nem vagyok nagy szakija ennek a systemjs-nek, de itt nem arról van szó, hogy development "módban" olyan mint a RequireJS (AMD) tehát nem kell bundling, production-ben pedig olyan mint egy browserify/webpack. Persze ha node-os packagek kellenek ahhoz kell bundling.
Na, lényeg a lényeg ott van a hiba hogy a num nevű változót próbálod behívni a modulból holott lel-ként exportáltad. Különbség van az "export default" és az export között. Példa program
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>The HTML5 Herald</title>
<meta name="description" content="The HTML5 Herald">
<meta name="author" content="SitePoint">
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
System.import('app/app.js')
</script>
</body>
</html>app.js
import nameItAsYouLike from './module';
import { otherStuff } from './module2';
console.log(nameItAsYouLike);
console.log(otherStuff);module.js
const stuff = 42;
export default stuff;module2.js
export const otherStuff = 43;
üdv
-
Jim-Y
veterán
-
Jim-Y
veterán
válasz
Speeedfire #5996 üzenetére
Pedig mire a vendorok is támogatnák teljes körűen addigra te is megszoknád a használatát. Szerintem a babel az production ready ugyhogy ha ilyesmitől félsz akkor ne tedd
-
Jim-Y
veterán
válasz
Speeedfire #5994 üzenetére
Amúgy mi a gond a babel-el?
-
Jim-Y
veterán
Na, de csak, hogy legyen ES6-os példa is
-
Jim-Y
veterán
válasz
Speeedfire #5990 üzenetére
ES6-hoz nem feltétlen kell babel, ott a node az támogatja már
Egyébként a setNameUrtartalom egy példány metódus amit egy példányon tudsz meghívni, a konstruktorban még nincs példányod így nem is tudod azt meghívni, meg hát értelme sincs. Inkább már ott setteld be normálisan.
+ használj nagy kezdőbetűt a classokhoz
+ a setterek igazodjanak a konvenciokhoz tehát legyen bemeneti argumentum és azt settelje be -
Jim-Y
veterán
Vannak itt angularjs guruk? http://stackoverflow.com/questions/36473502/uibmodal-call-scope-function-from-windowtemplate
-
Jim-Y
veterán
válasz
Speeedfire #5974 üzenetére
Az csak azért van mert túl kicsi a minta, minél nagyobb a minta annál jobban kilapolódik. Írd át 100-ról 1000-re, onnan 10.000-re stb. Szépen kilapolódik 70, 30-ra...
-
Jim-Y
veterán
válasz
Speeedfire #5969 üzenetére
Szerintem teljesen jó, hogy van egy tömbböd, amiben benne vannak a lehetséges itemek, majd összekevered a tömböt, és random választasz belőle.
Valami ilyesmit tudnék elképzelni bétának
https://jsfiddle.net/3421sjs2/
-
Jim-Y
veterán
válasz
Speeedfire #5965 üzenetére
Két külön dolgot csinálsz először, majd most. Az első példában X (100) darab elemből 30 darab egyest, 40db 2-t maradék 3-ast adsz vissza, tehát 1-esből 30% kettesből 40, stb darabod lesz. Ahogy csináltad az nem tartom túl erőforrásigényesnek mert O(n)-es a műveletigény. A második példában generálsz véletlen számokat 10-ig majd a véletlen szám függvényében adsz vissza valamit. Itt nem tudod garantálni hogy melyik milyen arányban legyen mert pszeudorandom lesz a szám. Nem akarod leírni hogy mit akarsz így megoldani hátha van rá jobb/más megoldás?
-
Jim-Y
veterán
Köszi,
Hát ezt egy kicsit későn láttam meg, közben előálltam egy béta verzióval saját kútfőből, de le fogom cserélni az általad linkelt elegánsabb megoldásra.
Azért, mert tudom, hogy így illik, a megoldás:
const { AuthError, LoginError } = require('blabla');
const THRESHOLD_OF_TRIES = 3; // 3 tries until drop
const DEFAULT_TIMEOUT = 300000; // 5mins in milliseconds
const cache = {};
module.exports = function * rateLimiter(next) {
const user = this.request.body.email;
if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() < cache[user].dropUntil) {
this.throw(423); // Locked for 5 mins
}
else if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() > cache[user].dropUntil) {
delete cache[user];
}
try {
yield next;
}
catch (err) {
if (err instanceof AuthError || err instanceof LoginError) {
if (!cache[user]) {
cache[user] = {
tries: 1,
dropUntil: null
};
}
else {
cache[user].tries++;
if (cache[user].tries >= THRESHOLD_OF_TRIES) {
cache[user].dropUntil = Date.now() + DEFAULT_TIMEOUT;
}
}
this.throw(err);
}
console.error(err);
}
}; -
Jim-Y
veterán
válasz
martonx #5952 üzenetére
Inkább utóbbi, de kliens oldalon semmit sem elég lekezelni. Közben rájöttem, hogy tényleg kevertem kicsit a szezont a fazonnal, vagy legalábbis két külön dologról van szó.
1: throttling, hány request mehet egyidejűleg - böngészőnek van beépített defaultja -> nem érdekel most engem
2: ddos - ne lehessen floodolni a szervert -> ehhez tűzfal vagy proxyszerver kell, van rá out-of-the-box megoldás -> nem érdekel most
3: "rate limiter" - a user megpróbál belépni, nem megy, megpróbál mégegyszer, nem megy, harmadik próba előtt már várnia kelljen 5 másodpercet -> ez kell nekemValószínűleg nincs erre kész megoldás, meg csinálni magamnak, de nem tűnik vészesnek, így, hogy már rendbe tettem a fejemben a dolgokat
És ha hiszitek ha nem, az, hogy leírtam már sokat segített, hogy tisztuljon a kép
-
Jim-Y
veterán
Sziasztok.
Elakadtam és nem tudom, hogy a "problémára" milyen buzzworddel tudnék keresni a neten :/
Rate limitinget szeretnék csinálni nodejs alatt. Például authentikáció -> a user próbálkozik, meghívja az API endpointot de nem sikerült az authentikáció (pl login) ezért újrapróbálkozik. Amit szeretnék hogy pl 3 próba után kelljen várni 5 másodpercet, 5 sikertelen próba után 15mp-et stb..
Magyarán az egy user által kiadott lehetséges requestek számát szeretném limitálni. Vagy backenden csak minden x-ediket feldolgozni, vagy.. hát pont ezaz, hogy nem tudom, hogy ezt hogy szokták csinálni, vagy hogy merre induljak el. Egyáltalán hogy tudnék erre rákeresni?
Próbáltam:
nodejs rate limiting
nodejs request limitation
nodejs limit the number of http request callsNem igazán jártam sikerrel :/
megj: koca módszerrel valami olyasmit csinálnék hogy írok egy middleware-t amiben van egy hashtable, valahogy azonosítom a requesteket, és ha ugyanazon usertől jön threshold + 1 request X mp-n belül (vagy más logika alapján, pl sikertelen login) akkor utána eldobom a többi requestet X mp-ig.
megj2: mintha a throttling lenne a jó buzzword erre, rákeresek...
megj3: most hogy így gondolkozom, lehet ez két külön probléma.
ad1: throttle - limitálni az adott időn belül kiadható requestek számát (jó lehet nekem valamire
)
ad2: login esetén számon kéne tartani a próbálkozások számát, ehhez jó lehet egy middleware, de valahogy azonosítani kéne a user-t. Namost kérdés, hogy a requestet kell-e azonosítani vagy a user-t. -
Jim-Y
veterán
A javascript esemenyvezerelt aszinkron programnyelv a te esetedben az aszinkronitason van a hangsuly. Ha ezzel a fogalommal most talalakozol eloszor akkor keress ra a neten biztos jo leirasok vannak rola. Roviden tomoren az ajax hivas megszolitja a backendet, kuld egy requestet amire majd valamikor a jovoben jon egy valasz. Na most az talan erzodik, hogy a majd valamikor a jovoben az nem egy tul kezzel foghato valami, nagyon sok mindentol fugg, hogy mikor jon meg a valasz igy a lenyeg, hogy addig nem szabad feltartani a program futasat (nem szabad blokkolni). Ezt javascriptben (is) promiszokkal oldjak meg (promise). Ha ez a fogalom is ismeretlen szamodra akkor keress ra a neten -> (A+ promise). A jquery-nek (gondolom jquery-t hasznalsz ajax implementaciokent) is van egy sajat implementacioja a promisokra ezt hivjuk deferred-nek. Na a jQ ajax metodusai ilyen deferreddel ternek vissza
pszeudokod:
var yourVariable;
var dfd = jquery.ajax(options);
dfd.then(
function goodCase(returnVal) {
yourVariable = returnVal;
// do smtg with yourVariable here
},
function errorCase(err) {
if (err) {
console.error(err):
}
}
); -
Jim-Y
veterán
válasz
Sk8erPeter #5926 üzenetére
De ezt a mondatot neked írtam és nem neki. Az ő szemszögéből az, hogy azt írjuk, hogy
function(num) { return num % 2 === 0 } vagy
num => num % 2 === 0az irreleváns, mert a lényeg a filter használata és, hogy az, hogy páros valami úgy nézzük meg, hogy x osztva kettővel a maradék nulla-e.
-
Jim-Y
veterán
válasz
Sk8erPeter #5923 üzenetére
Hát de mi az, hogy magic? Ez a legújabb szabvány, ez a nyelv része, ha magic akkor nem érti a nyelvet és még tanulni kell
Nekem senki ne próbálja meg eladni, hogy ne ezt írjam egy kezdőnek, ha nem érti, semmi gond, csapja fel a doksit és olvassa el, hogy mit jelent. Most ha curryztem volna meg ez-meg-az akkor még megértem, de ez egy nyelvi elem még csak nem is magic
Illetve én olyan példát szeretek mutatni ami előre viszi az embereket nem stagnál vagy visszahúzza. Ha például foglalkozik ezzel és megtetszik neki, majd netántán ezzel fog foglalkozni, akkor sokkal jobb ha már tudja, hogy mi az hogy fat arrow meg block scoping meg főleg, hogy mi az hogy [].filter.
p.s: szerinted egy filter + fat arrow már poweruser kategória? Mármint komolyan kérdezem
-
Jim-Y
veterán
válasz
martonx #5921 üzenetére
Amúgy nem ezt hívják lambdának, mármint..ezt is, de lambda már ES5-ben is volt. Ezt fat arrow-nak hívják ami egy rövidebb syntactic sugar a function expressiönök helyett és lexikálisan bindolja a this-t, kvázi block scoping. Az ES6 pedig már hivatalos az más kérdés a hogy a különböző vendorok még nem implementálták az összes ES6-os feature-t.
-
Jim-Y
veterán
válasz
Sk8erPeter #5917 üzenetére
"Azt nem tudom, van-e érdemi sebességbeli előny vagy hátrány a hagyományos for ciklushoz és tömbbe pakolós módszerhez képest."
Előny az írásmódban van, sebességben nincs, sőt, elméletileg lassabbnak is kéne lennie a filternek picivel mert:
- belül ez is csak egy for ciklust használ
- de pluszban vannak ellenőrzések, hogy egyáltalán tömb-e amin meghívjuk, stb..De a különbségek elhanyagolhatóak, biztos hogy egy átlagos js projektnél nem ez lesz a szűk keresztmetszet. Akkor pedig a filter elegánsabb, tömörebb, jobban olvashatóbb, leíróbb, chainelhető. Meg hát úgy egyáltalán egy újabb absztrakciós réteg (sort of)
-
Jim-Y
veterán
válasz
Mr Dini #5872 üzenetére
Szia. Mobilról. Nincs ezzel semmi gond, lehet olyan for ciklust írni ahol az inicializaciot nem a for-ban hanem előtte végzed, illetve a leptetest sem bízod a ciklusra, hanem a torzsben magadtól végzed. Általában ezeket szoktak kihagyni de a kilépési feltételt nem. Bár szerintem meg azt is ki lehet hagyni hisz ott a break. A te esetedben rossz bucketbe került a kilépési feltétel. Udv
-
Jim-Y
veterán
-
Jim-Y
veterán
válasz
Agostino #5761 üzenetére
Ezzel lehet jatszani a tobbieknek is, hogy miert nem megy.http://jsfiddle.net/d7ffr6qo/1/aha..megvan
-> http://jsfiddle.net/d7ffr6qo/2/
-
Jim-Y
veterán
-
Jim-Y
veterán
Sziasztok,
Tudnatok ajanlani jo/bevalt angularjs / angularjs2 tutorialt? egghed.io-t nezem, azt nem kell irni
Koszi
-
Jim-Y
veterán
válasz
inf3rno #5613 üzenetére
"gulp": "^3.9.0",
"gulp-jasmine": "^2.2.0",
"gulp-rename": "^1.2.2",
"gulp-replace-task": "^0.11.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-task-file-loader": "^1.0.0",
"gulp-uglify": "^1.4.2",Nekem ez a bajom a gulppal meg a grunttal is, hogy ezer meg egy dependencia es kb ennyi sorbol meg ennyi kodbol ossze lehet amugy hozni a buildelest mindenfele build tool nelkul. Vagy akar egy makefile.
-
Jim-Y
veterán
válasz
inf3rno #5604 üzenetére
FYI:
export function add() {
var result = 0;
for (var i = 0; i < arguments.length; ++i)
result += arguments[i];
return result;
}Ha mar ES6, akkor miert nem hasznalod ugy, ahogy kene, vagy ahogy lehet?
Gondolok itt..
export default (...nums) => nums.reduce((acc, num) => acc + num, 0);
Es ugyanez a tobbinel is.
-
Jim-Y
veterán
válasz
inf3rno #5483 üzenetére
Sajnos amikor keszult a projekt akkor nem igazan gondoltak fejlesztesi modszertanokra azota pedig annyira kinotte magat a projekt hogy eleg nehez (khmmm ain't noone will pay for this) akar csak egy TDD-t is bevezetni. Az eddig megirt kodbazis 90% nem tesztelheto modulokban lett megirva nem olyan szempontok szem elott tartasaval, szv fck
De azert probalkozik az ember mert igeny (most mar) lenne ra. Legalabbis fejlesztoi oldarol.
Async-hez sima jQuery -> AJAX/Deferred, legacy product es mint olyan jQuery-t hasznal, sajnos
A nativ hiba az mi volt?
-
Jim-Y
veterán
válasz
inf3rno #5481 üzenetére
A kliens altal tamasztott kovetelmenyekkel altalaban. A business logic neha-neha annyira bonyolult es a specifikacio annyiszor valtozik menet kozben, hogy eleg nehez egy tenyleg jol mukodo feature-t osszehozni.
Illetve a oldalak kozti navigaciot sokszor eleg nehez hibamentesen osszehozni mert a kapcsolati halo eleg bonyolult es a statemanagement is problemassa valik(hat).
Ami mar inkabb programozas kozeli az a kulonbozo platformok tamogatasanak igenye es az ebbol fakado gondok. Kulonbozo WebView verziokat kell tamogatni es kulonbozo Oprendszereket es nem minden mukodik ugyanugy ezeken. Ezekkel nagy szivas van. Erdekes nyelvi szinten ebbol nincs problema. Szinte minden tamogatott environmenten mar olyan WebView van ami az Ecma 5.1-et teljes koruen tamogatja szv ebbol nincs gond.
Kb ugy ennyi..
-
Jim-Y
veterán
válasz
inf3rno #5479 üzenetére
En Dartoztam egy darabig es nagyon tetszett, tenyleg, jo kis nyelv az, csak nem talalta meg a helyet a vilagban, de maga a nyelv az fasza
Ennek ellenere most egy baromi nagy JS heavy projekten dolgozom es latom, hogy a tenyleges problemak csak egy baromi kis szeletet jelentik a tipusossagbol adodo gondok?. Nem neveznem gondoknak oket..mondjuk ugy hogy baromi ritkan van abbol gond, hogy a JS dinamikusan tipusos az esetek kb 1%-ban szamit. Es ha azt vesszuk alapul, hogy jo JS fejlesztoink vannak akkor egesz egyszeruen nem lenne elonye egy TypeScriptnek egy vanilla JS-hez kepest :/
-
Jim-Y
veterán
válasz
inf3rno #5475 üzenetére
Nem szabad kizarolag sem typeof -ot sem instanceof -ot hasznalni type checkingre. Van amire ez jo, van amire az. Univerzalis megoldas nincs, peldaul amire te hasznaltad az instanceof-ot arra nem valo es nem ajanlott mert hibakhoz vezethet.
instanceof and multiple context (e.g. frames or windows)
Different scope have different execution environments. This means that they have different built-ins (different global object, different constructors, etc.). This may result in unexpected results. For instance, [] instanceof window.frames[0].Array will return false, because Array.prototype !== window.frames[0].Array and arrays inherit from the former. This may not make sense at first but when you start dealing with multiple frames or windows in your script and pass objects from one context to another via functions, this will be a valid and strong issue. For instance, you can securely check if a given object is in fact an Array using Array.isArray(myObj)
Epp ezaz, hogy nem muszaj mindig tipusellenorizni, ezert is irtuk itt tobben is, hogy a !x es tarsai hasznalata javvallott!
De asszem mar boven korul lett ragva a topicUdv
inf3rno: typescript, dart, coffee, elm.. egyeni preferencia kerdese, szerintem ezek csak akkor hasznosak ha Java-n nevelkedett embernek kell JS kodot irnia. <tapasztalat>
-
Jim-Y
veterán
válasz
inf3rno #5471 üzenetére
Amugy hogy miert nem ugyanaz.
null == false vs. !null
null == false
=========1. http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).2. assert(typeof null === 'object')
3.
If Type(x) is Object and Type(y) is either String or Number,
return the result of the comparison ToPrimitive(x) == y.4. ToPrimitive(null) http://www.ecma-international.org/ecma-262/5.1/#sec-9.1
-> Null The result equals the input argument (no conversion).5. http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
10. Return false.!null
===1. !ToBoolean(null)
2. Boolean(null) -> false
3. !false -> true -
Jim-Y
veterán
válasz
inf3rno #5472 üzenetére
Ezeknek nem az az ertelme, hogy tipusossa tegyunk egy dinamikusan tipusos nyelvet, ennek ondokumentacio meg self validation miatt van ertelme.
Pl ha van egy fuggveny ahol azt varod hogy tombbel hivjak meg, de biztosra akarsz menni, akkor
rossz esetben igy irod meg
function doStuff(inputArray) {
return inputArray.map(makeChange);
}Jo esetben pedig igy
/**
* @param {Array} inputArray
* @return {Array}
*/
function doStuff (inputArray) {
if (!inputArray || !utils.isArray(inputArray)) {
return [];
}
return inputArray.map(makeChange);
}Ondokumentalas, es annak a kodbeli leirasa, hogy te mint programozo milyen mukodesre irtad meg a fuggvenyt. Persze lehet ezt kevesbe expliciten is irni, pl:
function doStuff (inputArray) {
return (inputArray || []).map(makeChange);
}De ez utobbi megint csak a falsy value-k ellen ved, az ellen nem ha pl egy stringet adnak meg.
-
Jim-Y
veterán
válasz
inf3rno #5471 üzenetére
Hat... Chrome console ->
function x_test(val) {
console.group();
console.log(!val);
console.log(val == false);
console.groupEnd();
}
[0, null, void 0, '', Number.NaN, [], {}, 2, "test"].forEach(x_test);
// output
VM586:3
VM586:4 true
VM586:5 true
VM586:3
VM586:4 true
VM586:5 false
VM586:3
VM586:4 true
VM586:5 false
VM586:3
VM586:4 true
VM586:5 true
VM586:3
VM586:4 true
VM586:5 false
VM586:3
VM586:4 false
VM586:5 true
VM586:3
VM586:4 false
VM586:5 false
VM586:3
VM586:4 false
VM586:5 false
VM586:3
VM586:4 false
VM586:5 falseNekem ez nem ugy tunik mint ami ugyanaz lenne
-
Jim-Y
veterán
válasz
fordfairlane #5467 üzenetére
A !x kifejezes nem azt jelenti, hogy x == false hanem
The production UnaryExpression : ! UnaryExpression is evaluated as follows:
Let expr be the result of evaluating UnaryExpression.
Let oldValue be ToBoolean(GetValue(expr)).
If oldValue is true, return false.
Return true.A ToBoolean a falsy ertekeket konvertalja boolean false-ra amit negalni fogunk true-ra. Tehat a !x az egy falsy check es ajanlott a hasznalata ha nincs szukseg explicit check-re.
-
Jim-Y
veterán
válasz
fordfairlane #5465 üzenetére
Ezt kifejtened kerlek? Bar tudom, hogy nem nekem szolt de erdekelne
-
Jim-Y
veterán
válasz
martonx #5452 üzenetére
Felig meddig igazad van, a typeof az onmagaban broken es tipus vizsgalatra nem javallott. Egy dologra alkalmas, undefined vizsgalatra
Bar en arra is inkabb explicitebb megoldast valasztanek pl
valami === void 0 de ez egyeni preferencia.Kb jQuery + underscore + lodash-bol osszeollozva
function isString(obj) {
return $.type(obj) === 'string';
}
function isNumber(obj) {
return exist(obj) && $.isNumeric(obj);
}
function isBoolean(obj) {
return obj === true || obj === false || $.type(obj) === 'boolean';
}
function isArray(obj) {
return exist(obj) && $.isArray(obj);
}
function isFunction(obj) {
return $.type(obj) === 'function';
}
function isDate(obj) {
return $.type(obj) === 'date';
}
function isRegExp(obj) {
return $.type(obj) === 'regexp';
}
function isError(obj) {
return toString.call(obj) === '[object Error]';
}
function isUndefined(obj) {
return obj === void 0;
}
function isNull(obj) {
return obj === null;
}
function isEmpty(obj) {
if (!exist(obj)) {
return true;
}
if (isNumber(obj) || isBoolean(obj) ) {
return false;
}
if (isArray(obj) || isString(obj) || toString.call(obj) === '[object Arguments]') {
return obj.length === 0;
}
return $.isEmptyObject(obj);
}
function exist(obj) {
return !isNull(obj) && !isUndefined(obj);
} -
Jim-Y
veterán
válasz
slice14 #5419 üzenetére
Hat, hogy oszinte legyek sokkal jobb
Meg van 1-2 aprosag amit mashogy csinalnek. Peldaul arra nem lehet alapozni, hogy a hordozo kornyezet majd rendelkezik JSON parserrel ezert ha van lehetoseg jQuery-t hasznalni akkor javaslom.
Es akkor:
function getData(fileName) {
var rawData = readFile(),
parsedData;
try {
parsedData = $.parseJSON(rawData);
}
catch (ex) {
console.error(PARSE_DATA_ERR, ex);
}
return parsedData || {};
}Ha nincs lehetoseg jQuery-t hasznalni akkor pedig biztos ami tuti ellenorizzetek le, hogy van-e JSON object mint ahogy a jQ is csinalja:
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
} -
Jim-Y
veterán
válasz
slice14 #5326 üzenetére
Szerkesztettem az elozot
Majd ezt ugy lehetne felhasznalni, hogy
var file = readFile('/sdcard/Tasker/temp/weather.json'),
rawData = JSON.parse(file),
Weather = new Weather(rawData);
var sunPhase = Weather.getSunPhase(),
sunRise = sunPhase.getSunrise(),
sunriseHour = sunRise.getHour();
setGlobal('%Napfelkel1', sunriseHour);sot...
var settings = {
'%Napfelkel1': sunriseHour,
'masbizbasz': sunriseMinute,
'megintmasbizbasz': sunriseSecond
...
};
Object.keys(settings).forEach(function(key) {
setGlobal(key, settings[key]);
}); -
Jim-Y
veterán
válasz
slice14 #5324 üzenetére
Hat ez csak nevleg JS ugy megemlitem
.
Ennyire csunya JS kodot en meg ritkan lattam (nem mondom, hogy nem, de majdnemNa jo nem leszek negativ)
Amugy futtasd at a kodod ezen -> [link]
Amugy lehetne, egy csomo otletem van, hogy mivel lehetne szebbe tenni, de mindegyikbol az jonne ki, hogy tanulj egy kis JavaScriptet ^^ Peldaul, ha van idod es kedved, akkor csinalhatnak a Weather kore egy wrapper osztalyt.
pl:
/**
* @typedef {Object} Weather
* @property {CurrentObservation} current_observation
* ...etc
*/
/**
* @param {Weather} rawData
*/
function Weather(rawData) {
/** @type {Weather} */
this.baseData = rawData;
/** @type {CurrentObservation} */
this.currentObservation = rawData.current_observation;
}
/** @returns {CurrentObservation} */
Weather.prototype.getCurrentObservation = function() {
return this.currentObservation || {};
}
etc.. -
-
Jim-Y
veterán
válasz
jetarko #5253 üzenetére
WebStorm, ha megteheted, bar fizetos, ezert elhiszem, hogy kiesik, amugy meg a Sublime az jo
Nem inditok Eclipse flame-wart, pedig sracok... ugy bennem lenne, hogy szidjam, de nem, buszke vagyok magamra
A JS pedig egy igenis jo nyelv, en mar kb 2 eve ezzel dolgozom es hidd el, hogy nagyon meg lehet szokni, es durvan hatekonyan lehet vele haladni. A gyengen tipusossag pedig szinte egyaltalan nem okoz gondot egy baromi nagy projektnel. Vagy inkabb ugy irom, hogy a tipusossaggal van a legkevesebb gond. Neha 1-1 olyan hiba, hogy egy nem tombon hivunk tomb metodusokat, es elfelejtett a fejleszto argumentumot vizsgalni, de ez konnyen es gyorsan javithato.
-
Jim-Y
veterán
válasz
Speeedfire #5175 üzenetére
Szia. Én már igen. De pusztán ennyiből nehéz mondani bármit is. Konkretumok? :-)
Amúgy, konkretumok nélkül, android 4.4+-os telefon - > remote chrome debug - > chrome 41+ - > timeline fül és itt kiderulne minden.
-
Jim-Y
veterán
Szia, mi -sajnos- nem hasznalunk PhantomJS-t, pedig en szemely szerint egy headless approach-nak jobban orulnek, mint amit most a Karma nyujt, hogy megnyit egy bongeszo ablakot teljesen feleslegesen :/ Na mindegy, a lenyeg, hogy szerintem egy Jasmine elsajatitas nem tart tovabb par oranal. Igazabol semmi extra nincs benne, kell szerezni egy Jasmine cheat-sheet-et es akkor rogton hatekony munkat lehet vegezni benne. E2E tesztekben nincs nagy tapasztalatom, bar szerintem jo lenne ha lenne ra lehetosegunk, egy gondot latok ezekkel a tesztekkel, hogy
ad1: kell hozza egy habitus, a projekt team reszerol, hogy mindenkinek alap legyen, hogy a task egyben azt is tartalmazza, hogy teszteket kell csinalni
ad2: hogy ki legyen kenyszeritve a teszt ellenorzes-iras, peldaul git/svn precommit hookokkal vagy hasonlokkal.Nalunk most azzal van szivas, hogy hogy lehetne normalisan mockolni a tesztekben a require dependenciakat. Es nem is az elsoszamuakat, mert azzal nincs gond, hanem ha en fuggok egy A modultol, ami fugg egy B modultol, akkor hogy tudom a tesztben mockolni a B modult. Erre azert van szukseg, mert sajnos az app az elejetol kezdve rosszul lett felepitve es nem alakalmas a tesztelesre. Mert pl a B modul egybol bootstrapeli az alkalmazast ami nyilvan nem jo
Ezert kene mockolni.
-
Jim-Y
veterán
PR = Pull Request.
Az io.js-t ugy kepzeld el mint egy node-ot steroidokon
Ujabb V8 verzio van alatta ezaltal az uj fejlesztesek amiket a Google tesz a V8-ba es libuv-be (ez mar nem google) az hamarabb jut el hozzank, fejlesztokhoz. Pl ES6 meg par uj global API. iojs-hez is hasznalhatsz Mindent amit node-hoz.
-
Jim-Y
veterán
A Sailsjs-rol csak hallottam, tudom, hogy van ilyen de nem igazan tartom elterjedtnek. Ha nekem kene valamit hasznalnom MA, akkor biztos, hogy Express lenne, mert az a legismertebb, utana hapi vagy StrongLoop. Az io.js pedig nem olyan, hogy hasznald vagy sem, HASZNALD! Mindenki migral at az io-ra. Egyebkent is eloszor tedd fel az nvm-et es ezzel tedd fel a node/io-t. Az iojs es a node elobb-utobb ujra egyesulni fognak, de jelenleg az iojs-hez SOKKAL tobb PR erkezik.
-
Jim-Y
veterán
Szerintem node.js vonalon az Express a legismertebb, ez kb olyan mint az Angular (popularitasban) a frontenden. Meg a hapi.js amit ajanlani szoktak. Nekem egyikkel sincs komolyabb tapasztalatom, en eddig Restify-t hasznaltam ami egy express fork? talan, vagy ha nem akkor is kb ugyanaz csak sokkal lightweightebb.
-
Jim-Y
veterán
Hát, szerintem a bruttó havi félmilla az elég csekély, mármint én nem ennyit akarok majd keresni seniorként az tuti. És pl a LogMeIn-nél nem is ilyen fizuk vannak hanem inkább brutto 650-700 ahogy hallottam. A témához hozzászólva. Én JS devloperként tevékenykedem de pl formot nagyon nagyon ritkán kell írnom, egész egyszerűen szerintem azért, mert nálunk, és az itthoni projektjeimben is már ezer éve AJAX + REST-et használok nem pedig formokat. Aki pedig a klasszikus iskola híve, vagy legacy projekten dolgozik ott gondolom jó eséllyel van pl JSF ami -asszem- elfedi ezeket előled. Nem védeni akarom, szerintem bőven illett volna megcsinálnia, ha máshogy nem, AJAX-al vagy a googli segítségével
-
Jim-Y
veterán
válasz
Sk8erPeter #5127 üzenetére
BRENDAN: ... But long story short, there was an idea in JavaScript that I was pursuing, and maybe a few others saw it, too, of a language that wasn’t C-like. It was easy to use. It was meant for people who were building things inductively. They were learning programming for the first time. And they didn’t necessarily have to know where semicolons had to go, or even curly braces. I lost the curly brace front. On the semicolon front I said, “It’s ridiculous to reject a program because of a missing semicolon. We should do some kind of error correction procedure.” So, I made one up on the spot and that became automatic semicolon push.
[Laughter]
CHUCK: I kind of hacked this in and it stayed.
BRENDAN: Yup.
AARON: That’s awesome.
JOE: And 15 years later, people are still fighting over it.
JAMISON: That’s every programmer’s nightmare, right?
CHUCK: It’s so true.
JAMISON: Just the hack [inaudible] that you made.
AJ: I felt a sudden tremor in the force as if a thousand semicolons suddenly screwed up everything.
[Laughter]
BRENDAN: Yeah, there are definitely some issues there. But in fact, I remember Jamie Zawinski was writing some JavaScript and he had a long return expression so he put it on the next line with no semicolon after the return. And he was outraged that ASI would insert a semicolon after the return making the ‘return’ return the undefined value and the next line becomes dead code, a useless expression. It’s unreachable in the control flow of that function. He was totally outraged. [Laughs] But I said, “It’s too late. I can’t change it.” Once you ship things on the web, it’s very hard to change it.
-
Jim-Y
veterán
válasz
martonx #5118 üzenetére
Hat, de ez azert eleg alap. Marmint..automatic semicolon insertion temaban ez a de facto pelda
Aki JavaScriptes allasra jelentkezik, es ezen elhasal az szerintem ne is jelentkezzen inkabb ilyen allasra. De amugy a jelenlegi valosag, hogy olyan emberek jelentkeznek "JavaScript expert" cimszoval akik nem tudjak pl, hogy mi a kulonbseg a == es a === kozott. True story :/
-
Jim-Y
veterán
válasz
DNReNTi #5112 üzenetére
Ez JS-bol nem 2 perc. Pont ma meselte nekem egy Senior kollegam, akinek nagyon is adok a szavara, hogy a Javascripttel az a "baj", hogy ahhoz, hogy valaki tenyleg penge legyen belole szerinte nagyjabol 2 ev olvasgatas a temaban, es gyakorlas kell. Lehet kicsit tulzott, de szemelyes velemenyem szerint nem tul sokat...
-
Jim-Y
veterán
Dart for the Entire Web - valahol sejtheto volt. ++compileToJS
-
Jim-Y
veterán
válasz
fordfairlane #5083 üzenetére
Mert egyszerubb, kevesebb a boilerplate, es nincs a wrappelessel jaro overhead.
Mert oke, ha peldaul van egy html5-os canvassal dolgozo jatekod, ahol mondjuk van egy Bullet objektumod, es a szervertol kapod meg az adatait, akkor egyertelmu, hogy csinalsz neki egy "osztalyt" es ugy kezeled az adatokat. De ha egy sima weblaprol beszelunk, ahol te jo esetben egyszer hivsz meg egy service-t, egyszer kered le a json objektumot, akkor nem fogsz a response-nak csinalni egy kulon osztalyt, mert az overhead.
-
Jim-Y
veterán
válasz
fordfairlane #5081 üzenetére
Egy mostanaban eleg surun hasznalt REST+SPA alkalmazasban json objektumok mennek ide-oda a szerver es a kliens kozott, ilyenkor siman lehet az, hogy a szervertol kapott json objektumot kisse modositva klonoznod kell (akarmi miatt). Most te nem fogod mindig bewrappelni a json objektet egy JavaScriptes "osztalyba".
Object.create-s példát nem írok, az már ES5. -> es az miert baj?
-
Jim-Y
veterán
válasz
fordfairlane #5079 üzenetére
Persze, a legegyszerubb nyilvan ez lenne:
var tesztArray = [],
tesztAdat = {
egy: null,
ketto: null
};
tesztAdat.egy = 1;
tesztAdat.ketto = 2;
tesztArray.push(tesztAdat);
tesztArray.push({
egy: 3,
ketto: 4
});
console.log(tesztArray[0] === tesztArray[1]);De sokszor szukseg van arra, hogy klonozz egy objektumot.
-
Jim-Y
veterán
válasz
Speeedfire #5077 üzenetére
1: jQuery.extend pelda
2: pelda -
Jim-Y
veterán
válasz
Speeedfire #5074 üzenetére
Ugyanarra az objektumra mutato referenciat teszed ketszer a tombbe
assert(tesztArray[0] === tesztArray[1])
Új hozzászólás Aktív témák
Hirdetés
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- NTFS, exFAT, FAT32 – Melyiket válaszd és miért?
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Házimozi haladó szinten
- Google Pixel 8a - kis telefon kis késéssel
- Béta iOS-t használók topikja
- Viber: ingyen telefonálás a mobilodon
- Kerékpárosok, bringások ide!
- Lakáshitel, lakásvásárlás
- Gitáros topic
- További aktív témák...
- Lenovo ThinkPad T570, T580, P51s, P52s eredeti Lenovo, külső akkumulátor eladó
- Latitude 5450 27% 14" FHD IPS Ultra 5 135U 16GB 512GB NVMe magyar vibill gar
- Új Steelseries Arctis Nova 4 Wireless gamer fejhallgató 1 év garanciával
- Urmet Dialog PA3120 180 wattos digitális erősítő 1 év garanciával
- Lenovo Thinkpad USB-C dokkoló
- Erő és sebesség? Most az Öné lehet! Ráadásul kamatmentes rèszletre is!
- BESZÁMÍTÁS! Gigabyte A620M R5 7500F 32GB DDR5 500GB SSD RX 6700XT 12GB Cooler Master CMP 520L 750W
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- MacBook felvásárlás!! Macbook, Macbook Air, Macbook Pro
- HATALMAS AKCIÓK / MICROSOFT WINDOWS 10,11 / OFFICE 16,19,21,24 / VÍRUS,VPN VÉDELEM / SZÁMLA / 0-24
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest