NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Podobné dokumenty
Programování v jazyce JavaScript

Úvod do programovacích jazyků (Java)

Programování v jazyce JavaScript

PREPROCESOR POKRAČOVÁNÍ

20. Projekt Domácí mediotéka

Teoretické minimum z PJV

JavaScript. Konverze na boolean. JavaScript 1.5 ECMAScript ECMA-262, 3 rd edition

Programování v jazyce JavaScript

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Principy objektově orientovaného programování

NSWI096 - INTERNET JavaScript

Typický prvek kolekce pro české řazení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v jazyce JavaScript

CoffeeScript JavaScript, který se dá číst. I psát. Jan

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

11. Dědičnost. Dědičnost strana 103

Reflexe RTTI Runtime Type Identification

Programování v Javě I. Únor 2009

JavaScript 101. "Trocha života do statických stránek"

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Programování v Javě I. Leden 2008

Seminář Java IV p.1/38

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce

Úvod do programovacích jazyků (Java)

Návrhové vzory OMO, LS 2014/2015

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

První kapitola úvod do problematiky

Programování v jazyce JavaScript

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Čipové karty Lekařská informatika

TEDrv OVLADAČE KLÁVESNICE, MYŠI A DISPLEJE EMULÁTORU TERMINÁLU PRO MS WINDOWS. Příručka uživatele a programátora

Přehled probírané látky

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Vývojařská Plzeň AngularJS

Generické programování

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

7. Datové typy v Javě

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Jazyk C# (seminář 3)

Kód, který se nebude často měnit

Databáze Caché CSP Custom Tags

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Projekty pro výuku programování v jazyce Java

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Návrhové vzory Design Patterns

JAVA. Další jazyky kompilovatelné do Java byte-code

Objektově orientované programování v PHP 5. Martin Klíma

uterm03r JEDNOTKA IMPLEMETUJÍCÍ VZDÁLENÝ TERMINÁL TERM03 Příručka uživatele a programátora

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

Distribuované systémy a výpočty

0,0,analogIndicator,6f24a725-80b4-4ca2-872c-bfc522b5adc5,1,1,Analog Indikator %f

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

UJO Framework. revoluční architektura beans. verze

typová konverze typová inference

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Dědění, polymorfismus

Objektově orientované programování

OOPR_05. Případové studie

Semestrální práce implementuje univerzální tokenizer založený na stavovém automatu. Jsou implementovány následující automaty:

Javascript v Seznamu

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

VY_32_INOVACE_08_2_04_PR

Jazyk C# a platforma.net

Dědičnost (inheritance)

usimt03r JEDNOTKA PRO SIMULACI VZDÁLENÉ VARIANTY TERMINÁLU TERM03 NA POČÍTAČI PC Příručka uživatele a programátora

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Seminář Java II p.1/43

5 Rekurze a zásobník. Rekurzivní volání metody

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Michal Podzimek

Java Výjimky Java, zimní semestr

Distribuované systémy a výpočty

Jazyk C# (seminář 5)

Jazyk C# (seminář 6)

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Třídy a objekty -příklady

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

IRAE 07/08 Přednáška č. 7. Začátek (head)

DPKOM_06 Dědičnost entit a zpětná volání posluchači

5 Přehled operátorů, příkazy, přetypování

DEVFEST ANGULAR 2 WORKSHOP. angular.cz

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

PŘETĚŽOVÁNÍ OPERÁTORŮ

Skripty základy VB, vestavěné objekty, příklady

Jazyk C++ I. Polymorfismus

Transkript:

NA CO SI DÁT POZOR V JAVASCRIPTU? Milan Lempera @milanlempera Víťa Plšek @winsik Angular.cz

STRICT MODE volitelně aktivovatelná omezenější varianta JS 'use strict'; a = 11; // strict mode pro celý soubor // ReferenceError: a is not defined function sum(a, a, c) { // SyntaxError: // Strict mode function may not have duplicate parameter names return a + b + c; var somenumber = 010; // SyntaxError: // Octal literals are not allowed in strict mode.

V čem se JS liší od ostatních jazyků?

FUNCTION funkce jsou objektovým typem každá funkce je instancí typu Function function statement function expression function hello() { console.log('hello!'); hello(); var hello2 = function() { console.log('hello!'); hello2();

FUNCTIONS ARE FIRST-CLASS OBJECTS var hello = function() { console.log('hello!'); hello(); // 'Hello!' var helloalias = hello; helloalias(); // 'Hello!' anotherfunction(hello); var getfunction = function() { return function() { console.log('hello function'); var hello = getfunction(); hello(); // 'Hello function'

FUNCTION - NEEXISTUJE PŘETĚŽOVÁNÍ function test(a, b) {... function test(a, b, c) { // tato definice "přepíše" původní...

FUNCTION - ARGUMENTS function test(a, b) { console.log('a:', a); console.log('b:', b); console.log('arguments:', arguments); test(1, 2); // a: 1 // b: 2 // arguments: [1, 2] arguments je array like objekt obsahující parametry předané funkci při volání

FUNCTION - PARAMETRY test(1); // a: 1 // b: undefined // arguments: [1] test(1, 2, 3); // a: 1 // b: 2 // arguments: [1, 2, 3]

FUNCTION - DEFAULTNÍ HODNOTY function test(a) { a = a "defaultvalue"; Boolean true false String libovolný neprázdný řetězec "" Number libovolné nenulové číslo 0, NaN Object libovolný objekt null Undefined undefined

FUNCTION - DEFAULTNÍ HODNOTY function test(a, b) { a = a "defaultvalue"; b = typeof b!== 'undefined'? b : 1;

OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ JS MÁ OBJEKTY ALE NEMÁ TŘÍDY

OBJECT LITERAL var dog = { name: 'Teggi', speak: function() { return "Haf"; vytváří instanci objektu jde o anonymní objekt

KONSTRUKTOR var Dog = function(name) { this.name = name; this.speak = function() { return "Haf"; var dog = new Dog("Teggi"); konstrukční funkce název vždy velkým písmenem (konvence) voláme s operátorem new

KONSTRUKTOR var Dog = function(name) { this.name = name; this.speak = function() { return "Haf"; var dog1 = new Dog("Teggi"); var dog2 = new Dog("Rek"); var dog3 = new Dog("Sára"); var dog4 = new Dog("Zára"); var dog5 = new Dog("Dag");... každá instance bude mít vlastní metodu speak dog1.speak === dog2.speak; dog1.speak === dog3.speak; dog1.speak === dog4.speak; dog1.speak === dog5.speak; // false // false // false // false

PROTOTYPE vlastnost každé funkce obsahuje vlastnosti dostupné každé instanci odvozené z této funkce vlastnosti prototypu jsou společné všem instancím

KONSTRUKTOR + PROTOTYPE var Dog = function(name) { this.name = name; Dog.prototype.speak = function() { return "Haf"; var dog1 = new Dog("Teggi"); var dog2 = new Dog("Rek"); var dog3 = new Dog("Sára"); dog1.speak(); // "Haf" dog1.speak === dog2.speak; dog1.speak === dog3.speak; // true // true

DĚDIČNOST v JS používáme prototypovou dědičnost zřetězení prototypů od potomka k rodiči/rodičům

PROTOTYPE CHAIN var Dog = function(name) { this.name = name; Dog.prototype.speak = function() { return "Haf"; var dog1 = new Dog("Rek"); dog1 instanceof Dog // true dog1 instanceof Object // true dog1 // {name: "Rek" var p1 = Object.getPrototypeOf(dog1) var p2 = Object.getPrototypeOf(p2) var p3 = Object.getPrototypeOf(p3) // Dog.prototype // Object.prototype // null

DĚDIČNOST var Animal = function(species) { this.species = species; Animal.prototype.getSpeciesName = function() { return this.species; var Dog = function(name) { Animal.call(this, "Canis familiaris"); this.name = name; Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { return "Haf";

MODIFIKÁTORY PŘÍSTUPU JS NEMÁ v JS je vše public vše můžete přepsat i vlasnosti nativních objektů

OBJECT + CLOSURE var dogfactory = function(dogname) { var name = dogname; function speak() { return "Haf"; return { getname: function() { return name;, speak: speak var dog = dogfactory("teggi"); není to constructor, ale factory volá se bez new, nefunguje instanceof využívá closure

CLOSURE var genfrom10 = generator(10); genfrom10() // 10 genfrom10() // 11 genfrom10() // 12 var generator = function(initialnumber) { var current = initialnumber; return function () { return current++;

OBJECT + CLOSURE var dogfactory = function(dogname) { var name = dogname; function speak() { return "Haf"; return { getname: function() { return name;, speak: speak var dog = dogfactory("teggi"); Nepoužívejte closure jako náhradu private.

THIS V JS

THIS A OBJEKT var object = { prop: 42, method: function() { console.log(this.prop); console.log(object.method()); // 42

THIS A OBJEKT function independent() { console.log(this.prop); var object = { prop: 42, object.method = independent; console.log(object.method()); // 42 This je objekt na kterém je funkce volaná Vazba na this není danná definicí, ale pouze voláním. Proto nezáleží na tom, jestli funkce vznikla v rámci objektu, nebo jak k němu byla přiřazena.

THIS V ASYNCHRONNÍCH OPERACÍCH var object = { prop: 42, method: function() { console.log(this.prop); settimeout(object.method, 1000); // po jedné vteřině vypíše "undefined" settimeout(function() { object.method();, 1000); settimeout(object.method.bind(object), 1000); // fce.bind(thisarg[, arg1[, arg2[,...]]]) : Function

PROBLÉMY S ČÍSLY

OPERÁTORY A DYNAMICKÉ TYPY Operátor sčítání / operátor zřetězení "Angular" + ".cz" = "Angular.cz" 35 + 7 = 42 Význam operátoru závisí na kontextu 1 + "1" = "11" "1" + 1 = "11" Pokud je jeden z operandů string, jedná se o zřetězení

NUMBER - SPECIÁLNÍ HODNOTY "Barcamp " + 2015 = "Barcamp 2015" "Barcamp " - 2015 = NaN "Barcamp " * 2015 = NaN "Barcamp " / 2015 = NaN NaN Not a Number. 10 / 0 = Infinity Dělení nulou nevyvolá žádnou chybu.

A TO JE VŠECHNO? NENÍ, ALE TOTO BYLA NEJPROBLEMATIČTĚJŠÍ MÍSTA JS není takové strašidlo, když mu rozumíte!

ANGULAR.CZ/BARCAMP-HK