You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -1956,3 +1961,212 @@ Der unäre Operator `++` _gibt zuerst_ den Wert des Operanden aus und _erhöht d
1956
1961
1957
1962
</p>
1958
1963
</details>
1964
+
1965
+
1966
+
1967
+
---
1968
+
1969
+
###### <aname=20190707></a>64. Was ist der Output?
1970
+
1971
+
```javascript
1972
+
constvalue= { number:10 };
1973
+
1974
+
constmultiply= (x= { ...value }) => {
1975
+
console.log((x.number*2));
1976
+
};
1977
+
1978
+
multiply();
1979
+
multiply();
1980
+
multiply(value);
1981
+
multiply(value);
1982
+
```
1983
+
1984
+
- A: `20`, `40`, `80`, `160`
1985
+
- B: `20`, `40`, `20`, `40`
1986
+
- C: `20`, `20`, `20`, `40`
1987
+
- D: `NaN`, `NaN`, `20`, `40`
1988
+
1989
+
<details><summary><b>Antwort</b></summary>
1990
+
<p>
1991
+
1992
+
#### Antwort: C
1993
+
1994
+
In ES6 können wir Parameter mit einem Standardwert initialisieren. Der Wert des Parameters wird als Standard gesetzt, wenn kein anderer Wert übergeben wird oder der Wert des Parameters `"undefined"` ist. In diesem Fall verteilen wir die Properties von `value` in einem neuen Objekt, sodass `x` den Standardwert `{ number: 10 }` bekommt.
1995
+
1996
+
Das Standard Argument wird beim _Aufruf_ evaluiert. Jedes Mal, wenn wir die Funktion aufrufen, wird ein _neues_ Objekt erstellt. Wir rufen die `multiply` Funktion die ersten beiden Male auf ohne einen Wert zu übergeben: `x` hat daher den Standardwert `{ number: 10 }`. Wir loggen dann den multiplizierten Wert davon, sodass wir `20` bekommen.
1997
+
1998
+
Beim dritten Mal wird die `multiply` Funktion mit einem Argument für `value` aufgerufen. Der `*=` Operator ist kurz für `x.number = x.number * 2`: wir ändern den Wert von `x.number` und loggen den multiplizierten Wert `20`.
1999
+
2000
+
Beim vierten Mal übergeben wir wieder eine `value`. `x.number` wurde zuvor in `20` geändert, sodass `x.number *= 2` jetzt `40` loggt.
2001
+
2002
+
</p>
2003
+
</details>
2004
+
2005
+
---
2006
+
2007
+
###### 65. Was ist der Output?
2008
+
2009
+
```javascript
2010
+
[1, 2, 3, 4].reduce((x, y) =>console.log(x, y));
2011
+
```
2012
+
2013
+
- A: `1``2` and `3``3` and `6``4`
2014
+
- B: `1``2` and `2``3` and `3``4`
2015
+
- C: `1``undefined` and `2``undefined` and `3``undefined` and `4``undefined`
2016
+
- D: `1``2` and `undefined``3` and `undefined``4`
2017
+
2018
+
<details><summary><b>Antwort</b></summary>
2019
+
<p>
2020
+
2021
+
#### Antwort: D
2022
+
2023
+
Das erste Argument, welches die `reduce` Methode erhält ist der _Akkumulator_`x`. Das zweite Argument ist der _aktuelle Wert_, `y`. Durch die `reduce` Methode führen wir eine Callback Funktion an jedem Element des Arrays aus, was im Endeffekt einen einzelnen Wert ausgibt.
2024
+
2025
+
In diesem Beispiel geben wir nicht irgendwelche Werte aus, sondern loggen einfach nur den Akkumulator und den momentanen Wert.
2026
+
2027
+
Der Wert des Akkumulators ist gleich dem vorhergehenden Wert der Callback Funktion. Wenn wir `initialValue` nicht an die `reduce` Methode übergeben bleibt der Akkumulator gleich dem ersten Element des ersten Calls.
2028
+
2029
+
Beim ersten Call ist der Akkumulator (`x`) gleich `1` und der aktuelle Wert (`y`) ist `2`. Da wir in der Callback Funktion bleiben loggen wir den Akkumulator und den aktuellen Wert: `1` und `2`.
2030
+
2031
+
Wenn wir keinen Wert einer Funktion ausgeben wird `undefined` ausgegeben. Beim nächsten Call ist der Akkumulator daher `undefined` und der aktuelle Wert ist `3`. `undefined` und `3` werden geloggt.
2032
+
2033
+
Beim vierten Call geben wir wieder nichts aus, sodass der Akkumulator wieder `undefined` ist und der aktuelle Wert `4`. `undefined` und `4` werden geloggt.
2034
+
</p>
2035
+
</details>
2036
+
2037
+
---
2038
+
2039
+
###### 66. Mit welchem Constructor können wir die `Dog` Klasse erweitern?
2040
+
2041
+
```javascript
2042
+
classDog {
2043
+
constructor(name) {
2044
+
this.name= name;
2045
+
}
2046
+
};
2047
+
2048
+
classLabradorextendsDog {
2049
+
// 1
2050
+
constructor(name, size) {
2051
+
this.size= size;
2052
+
}
2053
+
// 2
2054
+
constructor(name, size) {
2055
+
super(name);
2056
+
this.size= size;
2057
+
}
2058
+
// 3
2059
+
constructor(size) {
2060
+
super(name);
2061
+
this.size= size;
2062
+
}
2063
+
// 4
2064
+
constructor(name, size) {
2065
+
this.name= name;
2066
+
this.size= size;
2067
+
}
2068
+
2069
+
};
2070
+
```
2071
+
2072
+
- A: 1
2073
+
- B: 2
2074
+
- C: 3
2075
+
- D: 4
2076
+
2077
+
<details><summary><b>Antwort</b></summary>
2078
+
<p>
2079
+
2080
+
#### Antwort: B
2081
+
2082
+
In einer abgeleiteten Klasse kann das `this` Keyword nicht aufgerufen werden, bevor `super` aufgerufen wurde. Wenn man das versucht wird ein ReferenceError ausgeworfen: 1 und 4 würden daher einen Referenz-Fehler ausgeben.
2083
+
2084
+
Mit dem `super` Keyword können wir den Constructor der Elternklasse mit gegebenen Argumenten aufrufen. Der Constructor der Elternklasse erhält das `name` Argument, sodass wir `name` an `super` übergeben müssen.
2085
+
2086
+
Die `Dog` Klasse erhält zwei Argumente, `name` da es `Animal` erweitert und `size` als extra Property der `Dog` Klasse. Beide müssen an die Constructor Funktion von `Dog` übergeben werden, was nur bei Constructor 2 richtig ist.
2087
+
</p>
2088
+
</details>
2089
+
2090
+
---
2091
+
2092
+
###### 67. Mit welchem Constructor können wir die `Dog` Klasse erweitern?
Mit dem `import` Keyword werden alle importierten Module _vorgeparsed_. Das bedeutet, dass importierte Module _zuerst_ ausgeführt werden, der Code in der eigentlichen Datei wird _danach_ ausgeführt.
2116
+
2117
+
Das ist der große Unterschied zwischen `require()` in CommonJS und `import`. Mit `require()` können Dependencies bei Bedarf geladen werden, während der Code ausgeführt wird. Hätten wir `require()` anstelle von `import` verwendet, wäre `running index.js`, `running sum.js`, `3` in der Konsole geloggt worden.
2118
+
2119
+
</p>
2120
+
</details>
2121
+
2122
+
---
2123
+
2124
+
###### 68. Was ist der Output?
2125
+
2126
+
```javascript
2127
+
console.log(Number(2) === Number(2))
2128
+
console.log(Boolean(false) === Boolean(false))
2129
+
console.log(Symbol('foo') === Symbol('foo'))
2130
+
```
2131
+
2132
+
- A: `true`, `true`, `false`
2133
+
- B: `false`, `true`, `false`
2134
+
- C: `true`, `false`, `true`
2135
+
- D: `true`, `true`, `true`
2136
+
2137
+
<details><summary><b>Antwort</b></summary>
2138
+
<p>
2139
+
2140
+
#### Antwort: A
2141
+
2142
+
Jedes Symbol ist eindeutig. Der Sinn des Argumentes, welches an das Symbol weitergegeben wird, ist dem Symbol eine Beschreibung zu geben. Der Wert des Symbols hängt nicht von diesem Argument ab. Beim vergleichen der Symbole werden zwei komplett neue Symbole erstellt: das erste `Symbol('foo')` und das zweite `Symbol('foo')`. Diese beiden Werte sind eindeutig und nicht identisch, weshalb `Symbol('foo') === Symbol('foo')` `false` ausgibt.
Mit der `padStart` Methode können wir Padding am Anfang des Strings hinzufügen. Der Wert, der an die Methode übergeben wird ist die _absolute_ Länge des Strings mit dem Padding. Der String `"Lydia Hallie"` hat eine Länge von `12`. `name.padStart(13)` fügt ein Leerzeichen am Anfang des Strings ein, weil 12 + 1 = 13 ist.
2168
+
2169
+
Falls der Wert, der an `padStart` übergeben wurde kleiner ist, als die Länge des Arrays, so wird kein Padding hinzugefügt.
0 commit comments