Appearance
JavaScript Basics
1
08.11.2022
JavaScript Basics
2
JavaScript #
- Skriptsprache für den Web Browser
- Heute via NodeJS auch ausserhalb des Browsers im Einsatz
- Code kann im Browser zur Laufzeit ausgeführt werden (ohne kompiliert zu sein)
08.11.2022
JavaScript Basics
3
In Webseite einbauen #
html
<html>
<head>
<script>
console.log("hello")
</script>
</head>
<body>
</body>
</html>
08.11.2022
JavaScript Basics
5
Dynamisch Typisiert #
- Keine strikte Typen
- Wilder Westen
- Objekte als Baumstruktur
- ... aber ohne Klassen
- Was sind Nachteile von dynamischer Typisierung?
08.11.2022
JavaScript Basics
6
Funktionale Sprache #
- Funktionen können Variablen zugewiesen werden
- Funktionen können als Parameter anderen Funktionen mitgegeben werden.
08.11.2022
JavaScript Basics
8
NodeJS #
- Runtime ohne Webbrowser
- Ideal für Terminalprogramme (als Gegenpol zu Pyhton)
- Package Management!
- Mit Frameworks wie
expressjs
sehr zugänglicher Webserver
08.11.2022
JavaScript Basics
9
Vorteile von JS #
- wie bei Python schnelles Protoyping möglich
- je nach Anwendungsfall bedeutend bessere Performance als Python
- wie bei Python riesiges Ökosystem an Frameworks und Libs
- für Entwickler mit C / Java Hintergrund einfacher Einstieg dank Syntax
08.11.2022
JavaScript Basics
10
Nachteile von JS #
- Dynamische Typisierung
- ... heisst ohne Compiler
- ... heisst Crashes und Problem im Feld anstelle von Compilerverweigerung
- ... typisch: Nullpointers / Undefined Variable
08.11.2022
JavaScript Basics
11
JSON #
- Object Notation
json
{
"id" : 100,
"content" : [
{
"name": "ls",
"desc": "lists files"
},
{
"name": "rm",
"desc": "deletes files"
}
]
}
08.11.2022
JavaScript Basics
12
JSON Einsatz #
- Nr. 1 Datenformat bei Web APIs
- Speichern von Daten lokal
- Hauptvorteil gegenüber anderen Notationen:
- Human Readable!!
08.11.2022
JavaScript Basics
Beispiel Funktionen
14
js
const hello = () => {
console.log("hello from the terminal")
};
const greetWith = (helloMethod) => {
console.log("careful, I am greeting now!")
helloMethod();
};
greetWith(hello);
08.11.2022
JavaScript Basics
Object on the Fly
15
js
const linuxEntry = {
command: "ls",
description: "Lists Files in cwd"
};
08.11.2022
JavaScript Basics
17
Variablen Deklarieren #
js
// immutable variable
const message = "hello";
// mutable variable
let currentEntry = 1;
currentEntry = 2;
08.11.2022
JavaScript Basics
18
Immutability: Faustregel #
Standardmässig soll immer const
verwendet werden.
Nur wenn eine Variable mutabale sein soll let
verwenden.
08.11.2022
JavaScript Basics
19
Immutable Objects #
js
const linuxEntry = {
command: "ls",
description: "Lists Files in the current working directory"
};
// totally safe!
linuxEntry.command = "ls -al"
// forbidden!
linuxEntry = {};
08.11.2022
JavaScript Basics
20
Array Beispiel #
js
const commands = [
{
name: 'ls',
desc: 'lists Files'
},
{
name: 'rm',
desc: 'deletes Files'
},
{
name: 'cd',
desc: 'changes dir'
}
];
08.11.2022
JavaScript Basics
21
forEach
Loop #
js
for(const cmd of commands){
console.log(`command: ${cmd.name}`);
}
08.11.2022
JavaScript Basics
22
forEach
Array function #
js
commands.forEach((cmd) => {
console.log(`command: ${cmd}`);
});
08.11.2022
JavaScript Basics
23
push: Add to Array #
- Arrays können im Gegensatz zu Java während der Laufzeit erweitert werden: Arrays verhalten sich wie Listen
js
commands.push({
name: 'curl',
desc: 'executes http request'
});
08.11.2022
JavaScript Basics
24
map() #
- Sehr wichtige Funktion!
js
const names = commands.map((cmd) => {
return `name: ${cmd.name}`;
});
console.log('names', names); // ein Array
console.log(names.join('/')); // ein String
08.11.2022
JavaScript Basics
Objekt Returnen (Short)
25
- Beachten
({ ... })
ohnereturn
statement
js
const names = commands.map((cmd) => ({
name: cmd.name;
}));
console.log('objects', names);
// ein Array
console.log(names.map((n) => n.name).join('/'));
// ein String
08.11.2022
JavaScript Basics
26
filter() #
js
const withFiles =
commands.filter(cmd => cmd.desc.includes('Files'));
console.log('commands with files', withFiles);
08.11.2022
JavaScript Basics
Object with Keys
27
js
const commands = {
'ls' : {
'desc': 'lists Files'
},
'rm' : {
'desc' : 'deletes Files'
},
'pwd' {
'desc' : 'current working dir'
}
};
08.11.2022
JavaScript Basics
28
Enumerate Keys #
js
// Array mit ls, rm, pwd als string
const keys = Object.keys(commands);
for(const k of keys) {
console.log(`${k} => ${commands[k].desc}`);
}
08.11.2022
JavaScript Basics
29
Browser JS ist Singlethreaded #
- JavaScript im Browser ist Singlethreaded
- Worksers als alternative
- ... daher Problematisch, da nur immer etwas ausgeführt werden kann.
- Problem:
fetch
request => Blockiert den Thread!
08.11.2022
JavaScript Basics
Promises
30
fetch
Returnt ein Promise. Es wird implementiert, was passieren soll, wenn das Resultat bereit ist- Java: Ereignisorientiert mit
ActionListener
Callback
js
const promise = fetch('https://google.ch');
promise.then((res) => {
console.log('res: ' + res);
});
promise.catch((err) => {
console.log('error: ' + err);
});
08.11.2022
JavaScript Basics
Besser: Async / Await
31
- Code besser lesbar
- keine Callback Hell
js
const startRequest = async () => {
try {
const res = await fetch('https://google.ch');
console.log(`res: ${res}`);
} catch(err) {
console.log(`error: {err}`);
}
}
startRequest();
08.11.2022
JavaScript Basics
32
JS Template Strings #
js
const command = {
name: "ls",
desc: "lists files"
};
console.log(`command: ${command.name}: ${command.desc}`);
08.11.2022
JavaScript Basics
JS Pseudoklassen
33
- Methode gibt Objekt mit Methoden zurück (Konstruktorersatz) -
name
ist hier Pseudoattribut.
js
const init = (name) => {
const printCommand = () => {
console.log(`command: ${name}`);
}
return {
printCommand,
}
};
const ls = init("ls");
const pwd = init("pwd");
ls.printCommand();
pwd.printCommand();
08.11.2022