320 likes | 459 Views
Michal Augustýn AVAST Software Microsoft Most Valuable Professional. JavaScript – programovací jazyk. Historie. LiveScript -> ECMAScript -> JavaScript jedna z derivací ECMAScriptu. http://www. smashingmagazine.com /2009/07/29/ misunderstanding - markup - xhtml -2- comic - strip /.
E N D
Michal Augustýn AVAST Software Microsoft Most Valuable Professional JavaScript – programovací jazyk
Historie • LiveScript -> ECMAScript -> JavaScript • jedna z derivací ECMAScriptu http://www.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/
Jak ho vidí programátoři • každý ho zná • jednoduchý • nikdo ho nemá rád • dělat v něm je za trest • nikdo ho pořádně neumí
Vlastnosti • skriptovací jazyk • objektově orientovaný • prototypový • dynamický • slabě typovaný • má first-classfunction • funkcionální (closures a high-orderfunctions) • garbagecollector
Typy (podle typeof) • number – 117, 015, 0x15, 3.14, 3.14E-3, NaN • string • boolean – true a false • undefined • function • object – null a ostatní objekty • ještě tu je operátor instanceOf
Operátory • aritmetické, přiřazení, bitové – normální • logické - && a || • falsy: 0, false, null, undefined, “”, NaN • (0 && 10) === 0 • (0 || 10) === 10 • porovnání • striktní: ===, !== • type-converting: ==, != • 3 === “3” je false • 3 == “3” je true
Function • length – počet parametrů • toString() • call(thisArg, arg1, arg2, arg3, …) • apply(thisArgs, args)
Objekty • objectliteral
this • volání funkce prefixovanénew • volání metody – myCar.toString() • Function.call – myCar.toString.call(yourCar) • Function.apply
Vestavěné objekty • Boolean, Number, String • Date, RegExp, Math • Array
Dědičnost • třída ~~ constructorfunction • dědičnost
Prototypy • každá funkce má propertyprototype • má jen položku constructor
Prototypy (2) • k ukládání statických vlastností
Prototypy podrobněji • funkce (instance Function) má prototype • každý objekt má [[Prototype]] (__proto__) • var myCar = new Car(); • myCar.[[Prototype]] = Car.prototype; • co je v Car.[[Prototype]] ? • Function.prototype
Dědičnost a prototypy (2) BetterCar Car Function.prototype Function.prototype [[Prototype]] [[Prototype]] prototype prototype constructor constructor Object.prototype Object.prototype [[Prototype]] [[Prototype]] myBetterCar myCar [[Prototype]] [[Prototype]]
Zajímavé funkce • instanceOf • myCarinstanceOfBetterCar • iteruje přes [[Prototype]] levého operandu • hledá BetterCar.prototype • getPrototypeOf
Statements • if-else, switch, throw, while • try-catch-finally • try { blabla(); }catch (e if e instanceOfMyError) {}catch(e) {} • for (var i in object) // přes klíče • foreach (var i in object) // přes hodnoty
Shrnutí (1) • všechno je objekt, včetně funkcí • objekt je hashmapa • vytvoření objektu: • objectliteral (podobně jako JSON) • newKonstrukcniFunkce() • nějaký objekt je vždy aktuální – this • v prohlížečích window
Shrnutí (2) • this lze změnit: • zavoláním metody objektu (objekt se stane thisem) • voláním newKonstrukcniFunkce() • apply • call • každá funkce má položku prototype, na kterou odkazují všechny instance vytvořené pomocí této funkce (přes skrytou položku [[Prototype]])
Appendix - verze • ECMAScript – 1-5 • JavaScript – 1.0 – 1.8.5 • 1.6 – EX4, foreach … in • 1.7 – generátory (yield), iterátory, let • 1.8 – expressionclosures • 1.8.1 – native JSON • 1.8.5 – nové metody v Object
Děkuji za pozornost • Jaký je rozdíl mezi Javou a JavaScriptem?One is essentially a toy, designed for writing small pieces of code, and traditionally used and abused by inexperienced programmers.The other is a scripting language for web browsers.