JavaScript Flashcards
How would you describe what REST is to your non-technical friend?
Its a design pattern to provide a standard way for clients and servers to communicate
What does a RESTful API usually return in response to incoming requests?
JSON data
What kind of client devices can make use of a RESTful API?
All client devices that are connected to the internet can make use of a RESTful API - they don’t need a browser!
What are the 5 principles of REST?
1.Client & Server Separation
2. Statelessness
3. Accessing Resources
What does it mean for the server to be “Stateless”?
It forgets the interaction after the response is sent.
Was sind falsey values in JS?
JavaScript wandelt jeden Wert der innerhalb eines Boolean Kontext verwendet wird, automatisch bzw. implizit in einen Boolean Typ um. Das ist z.B. in Bedingungen, Schleifen oder Vergleichen der Fall.
Ein falsey value ist in diesen Fällen ein Wert der automatisch zum Boolean Typ false konvertiert wird. Es existieren 7 falsey values:
- 0 bzw -0
- null
- undefined
- ’’
- false
- 0n
- NaN
(8. document.all - leeres Object - deprecated)
Vorsicht ist geboten, folgende Werte sind truthy
- []
- {}
- “0”
Was ist der Unterschied zwischen const, var und let ?
Das sind drei verschiedene Variablentypen. const und let wurden mit ES6 eingeführt. Einer Variablen die mit const deklariert ist, kann nur einmalig ein Wert zugewiesen werden. Spezialfall Object: const person = { name: ‘Tim’}; person.name = ‘Tina’ ist möglich! Eine Variable die mit let deklariert wurde, ist nur innerhalb eines {}-block-Scope gültig. Eine mit var deklarierte Variable ist im function scope und in ggf. enthaltenen Blöcken gültig und unterliegt dem Hoisting! (z.B. registrieren von event handlern in einer for-Schleife gibt immer gleichen Index zurück). Das birgt Gefahr für Fehler! Ältere Browser benötigen babel.js um let und const variablen zu transpilen.
Inwiefern unterscheiden sich == und ===?
== vergleicht zwei Variablen. === ist der strengere Vergleich. Er überprüft zusätzlich, ob die Werte vom gleichen Datentyp sind. Ersteres löst meine persönliche ‘LooseEquality Hölle’ aus: //LooseEquality Hell
// == -> isLooselyEqual
// === -> isEqual
/*1.Example
let str = ‘0’;
let num = 0;
//isLooselyEqual
//passes
if(str == num){
console.log(‘same bro ‘)
}
//fails
if(typeof(str) == typeof(num)){
console.log(‘ok bro ‘)
}
//fails
if(str === num){
console.log(‘same same bro ‘)
}
*/
/*2. Example
let str = null;
let num = undefined;
//passes
if(str == num){
console.log(‘same bro ‘)
}
//fails
if(typeof(str) == typeof(num)){
console.log(‘ok bro ‘)
}
//fails
if(str === num){
console.log(‘same same bro ‘)
}
*/
/*3.Example: WTF
let str = null;
let num = 0;
//FAILS
if(str == num){
console.log(‘same bro ‘)
}
//fails
if(typeof(str) == typeof(num)){
console.log(‘ok bro ‘)
}
//fails
if(str === num){
console.log(‘same same bro ‘)
}
*/
/4.Example: WTF/
let str = []; // truthy - Object wird zu primitive umgewandelt
let num = true; // truthy - Bool true wird zu 1 (Number) umgewandelt
//Erwartung: passes
//FAILS
if(str == num){
console.log(‘same bro ‘)
}
//fails
if(typeof(str) == typeof(num)){
console.log(‘ok bro ‘)
}
//passes, because truthy
if(num){
console.log(‘same same bro ‘)
}
//passes, passes because truthy
if(str){
console.log(‘same saaaaaaaame bro ‘)
}