Skip to content

Commit 1e9be31

Browse files
committed
Merge branch 'master' into russian_updates_2019_08-1
2 parents c281788 + 28a3f11 commit 1e9be31

File tree

3 files changed

+1970
-26
lines changed

3 files changed

+1970
-26
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ List of available languages:
1515
* [العربية](./ar-AR/README_AR.md)
1616
* [اللغة العامية - Egyptian Arabic](./ar-EG/README_ar-EG.md)
1717
* [Bosanski](./bs-BS/README-bs_BS.md)
18-
* [Deutsch](./de-DE/README-de_DE.md)
18+
* [Deutsch](./de-DE/README.md)
1919
* [Español](./es-ES/README-ES.md)
2020
* [Français](./fr-FR/README_fr-FR.md)
2121
* [日本語](./ja-JA/README-ja_JA.md)
@@ -2826,7 +2826,7 @@ class Person {
28262826
}
28272827
}
28282828

2829-
const member = Person("John")
2829+
const member = new Person("John")
28302830
console.log(typeof member)
28312831
```
28322832

de-DE/README-de_DE.md renamed to de-DE/README.md

Lines changed: 274 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@ Von einfach bis fortgeschritten: teste wie gut du JavaScript kennst, frische dei
77
Die Antworten sind unterhalb der Fragen versteckt. Du kannst einfach darauf klicken um die Antworten anzuzeigen. Viel Glück :heart:
88

99
### Alle verfügbaren Sprachen
10-
* [English](./README.md)
11-
* [العربية](./README_AR.md)
12-
* [اللغة العامية - Egyptian Arabic](./README_ar-EG.md)
13-
* [Bosanski](./README-bs_BS.md)
14-
* [Deutsch](./README-de_DE.md)
15-
* [Español](./README-ES.md)
16-
* [Français](./README_fr-FR.md)
17-
* [日本語](./README-ja_JA.md)
18-
* [한국어](./README-ko_KR.md)
19-
* [Português Brasil](./README_pt_BR.md)
20-
* [Русский](./README_ru-RU.md)
21-
* [Türkçe](./README-tr_TR.md)
22-
* [Українська мова](./README-ua_UA.md)
23-
* [Tiếng Việt](./README-vi.md)
24-
* [中文版本](./README-zh_CN.md)
10+
* [English](../en-EN/README.md)
11+
* [العربية](../ar-AR/README_AR.md)
12+
* [اللغة العامية - Egyptian Arabic](../ar-EG/README_ar-EG.md)
13+
* [Bosanski](../bs-BS/README-bs_BS.md)
14+
* [Deutsch](../de-DE/README.md)
15+
* [Español](../es-ES/README-ES.md)
16+
* [Français](../fr-FR/README_fr-FR.md)
17+
* [日本語](../ja-JA/README-ja_JA.md)
18+
* [한국어](../ko-KR/README-ko_KR.md)
19+
* [Português Brasil](../pt-BR/README_pt_BR.md)
20+
* [Русский](../ru-RU/README_ru-RU.md)
21+
* [Українська мова](../ua-UA/README-ua_UA.md)
22+
* [Tiếng Việt](../vi-VI/README-vi.md)
23+
* [中文版本](../zh-CN/README-zh_CN.md)
24+
* [Türkçe](../tr-TR/README-tr_TR.md)
2525

2626
---
2727

@@ -2201,8 +2201,8 @@ Mit dem `+` Operator können Strings zusammengesetzt werden. In diesem Fall werd
22012201
22022202
```javascript
22032203
function* startGame() {
2204-
const Answer = yield "Do you love JavaScript?";
2205-
if (Answer !== "Yes") {
2204+
const Antwort = yield "Do you love JavaScript?";
2205+
if (Antwort !== "Yes") {
22062206
return "Oh wow... Guess we're gone here";
22072207
}
22082208
return "JavaScript loves you back ❤️";
@@ -2225,9 +2225,9 @@ console.log(/* 2 */); // JavaScript loves you back ❤️
22252225
22262226
Eine Generator Funktion pausiert die Ausführung, wenn das `yield` Keyword vorliegt. Zuerst müssen wir den String "Do you love JavaScript?" abwarten, was mit `game.next().value` möglich ist.
22272227
2228-
Jede Zeile wird ausgeführt, bis das erste `yield` Keyword auftritt. Da auf der ersten Zeile ein `yield` in der Funktion vorliegt wird die Ausführung damit angehalten. Das bedeutet, dass die Variable `Answer` _noch nicht definiert_ wurde.
2228+
Jede Zeile wird ausgeführt, bis das erste `yield` Keyword auftritt. Da auf der ersten Zeile ein `yield` in der Funktion vorliegt wird die Ausführung damit angehalten. Das bedeutet, dass die Variable `Antwort` _noch nicht definiert_ wurde.
22292229
2230-
Wenn wir `game.next("Yes").value` aufrufen wird das vorhergehende `yield` durch den Wert des Parameters ersetzt, der an `next()` übergeben wird - `"Yes"` in diesem Fall. Der Wert der Variable `Answer` ist jetzt gleich `"Yes"`. Das if-Statement gibt `false` aus und `JavaScript loves you back ❤️` wird geloggt.
2230+
Wenn wir `game.next("Yes").value` aufrufen wird das vorhergehende `yield` durch den Wert des Parameters ersetzt, der an `next()` übergeben wird - `"Yes"` in diesem Fall. Der Wert der Variable `Antwort` ist jetzt gleich `"Yes"`. Das if-Statement gibt `false` aus und `JavaScript loves you back ❤️` wird geloggt.
22312231
22322232
</p>
22332233
</details>
@@ -2727,3 +2727,258 @@ Wenn wir `hasName` gleich `name` setzen, so beinhaltet `hasName` den Wert von `n
27272727
`name.length` gibt die Länge des Arguments aus, nicht den Boolean Wert.
27282728
</p>
27292729
</details>
2730+
2731+
2732+
---
2733+
2734+
###### <a name=20190805></a>87. Was ist der Output?
2735+
2736+
```javascript
2737+
console.log("I want pizza"[0])
2738+
```
2739+
2740+
- A: `"""`
2741+
- B: `"I"`
2742+
- C: `SyntaxError`
2743+
- D: `undefined`
2744+
2745+
<details><summary><b>Antwort</b></summary>
2746+
<p>
2747+
2748+
#### Antwort: B
2749+
2750+
Um ein Zeichen an einer bestimmten Stelle eines Strings zu bekommen kann man Bracket Notation verwenden. Das erste Zeichen in einem String hat den Index 0, usw. In diesem Fall möchten wir das Zeichen mit dem Index 0, was das Zeichen `"I"` loggt.
2751+
2752+
Diese Methode funktioniert nicht in IE7 und davor. Hier muss `.charAt()` verwendet werden.
2753+
2754+
</p>
2755+
</details>
2756+
2757+
---
2758+
2759+
###### 88. Was ist der Output?
2760+
2761+
```javascript
2762+
function sum(num1, num2 = num1) {
2763+
console.log(num1 + num2)
2764+
}
2765+
2766+
sum(10)
2767+
```
2768+
2769+
- A: `NaN`
2770+
- B: `20`
2771+
- C: `ReferenceError`
2772+
- D: `undefined`
2773+
2774+
<details><summary><b>Antwort</b></summary>
2775+
<p>
2776+
2777+
#### Antwort: B
2778+
2779+
Man kann den Wert eines Standard Parameters gleich einem anderen Parameter in der Funktion setzen, sofern diese _vor_ dem Standard Parameter definiert wurden. Wir übergeben den Wert `10` an die `sum` Funktion. Wenn die `sum` Funktion nur ein Argument übergeben bekommt bedeutet das, dass der Wert für `num2` nicht gesetzt wurde und der Wert von `num1` ist gleich dem Wert `10`. Der Standardwert von `num2` ist gleich dem Wert von `num1`, sprich `10`. `num1 + num2` gibt `20` aus.
2780+
2781+
Wenn man den Wert des Standard Paramenters gleich dem Parameter setztm der _danach_ definiert wurde, bekommen wir einen Fehler ausgegeben, da der Wert noch nicht initialisiert wurde.
2782+
2783+
</p>
2784+
</details>
2785+
2786+
---
2787+
2788+
###### 89. Was ist der Output?
2789+
2790+
```javascript
2791+
// module.js
2792+
export default () => "Hello world"
2793+
export const name = "Lydia"
2794+
2795+
// index.js
2796+
import * as data from "./module"
2797+
2798+
console.log(data)
2799+
```
2800+
2801+
- A: `{ default: function default(), name: "Lydia" }`
2802+
- B: `{ default: function default() }`
2803+
- C: `{ default: "Hello world", name: "Lydia" }`
2804+
- D: Globales Objekt von `module.js`
2805+
2806+
<details><summary><b>Antwort</b></summary>
2807+
<p>
2808+
2809+
#### Antwort: A
2810+
2811+
Mit `import * as name` importieren wir _alle Exporte_ der `module.js` in `index.js` als `data`. In der Datei `module.js` haben wir zwei Exporte: den Standard Export und einen benannten Export. Der Standard Export ist eine Funktion, die `"Hello World"` ausgibt und der benannte Export ist eine Variable namens `name` mit dem Wert `"Lydia"`.
2812+
2813+
Das `data` Objekt hat eine Standard Property für alle Standard Exporte, andere Properties haben die Namen des benannten Exports und der entsprechenden Werte.
2814+
2815+
</p>
2816+
</details>
2817+
2818+
---
2819+
2820+
###### 90. Was ist der Output?
2821+
2822+
```javascript
2823+
class Person {
2824+
constructor(name) {
2825+
this.name = name
2826+
}
2827+
}
2828+
2829+
const member = new Person("John")
2830+
console.log(typeof member)
2831+
```
2832+
2833+
- A: `"class"`
2834+
- B: `"function"`
2835+
- C: `"object"`
2836+
- D: `"string"`
2837+
2838+
<details><summary><b>Antwort</b></summary>
2839+
<p>
2840+
2841+
#### Antwort: C
2842+
2843+
Klassen sind syntaktischer Zucker für Funktionskontruktoren. Das Equivalent der `Person` Klasse als Funktionskonstruktor wäre:
2844+
2845+
```javascript
2846+
function Person() {
2847+
this.name = name
2848+
}
2849+
```
2850+
2851+
Das Aufrufen eines Funktionskonstruktors mit `new` hat zur Folge, dass eine Instanz von `Person` erstellt wird. `typeof` gibt `"object"` für die instanz aus. `typeof member` gibt `"object"` aus.
2852+
2853+
</p>
2854+
</details>
2855+
2856+
---
2857+
2858+
###### 91. Was ist der Output?
2859+
2860+
```javascript
2861+
let newList = [1, 2, 3].push(4)
2862+
2863+
console.log(newList.push(5))
2864+
```
2865+
2866+
- A: `[1, 2, 3, 4, 5]`
2867+
- B: `[1, 2, 3, 5]`
2868+
- C: `[1, 2, 3, 4]`
2869+
- D: `Error`
2870+
2871+
<details><summary><b>Antwort</b></summary>
2872+
<p>
2873+
2874+
#### Antwort: D
2875+
2876+
Die `.push` Methode gibt die _neue Länge_ des Arrays aus, nicht die Länge des Arrays selbst. Wenn wir `newList` gleich `[1, 2, 3].push(4)` setzen, setzen wir `newList` auch gleich der Länge des Arrays: `4`.
2877+
2878+
Dann versuchen wir die `.push` Methode auf `newList` anzuwenden. Da `newList` den numerischen Wert `4` beinhaltet können wir die `.push` Methode nicht anwenden: ein TypeError wird ausgegeben.
2879+
2880+
</p>
2881+
</details>
2882+
2883+
---
2884+
2885+
###### 92. Was ist der Output?
2886+
2887+
```javascript
2888+
function giveLydiaPizza() {
2889+
return "Here is pizza!"
2890+
}
2891+
2892+
const giveLydiaChocolate = () => "Here's chocolate... now go hit the gym already."
2893+
2894+
console.log(giveLydiaPizza.prototype)
2895+
console.log(giveLydiaChocolate.prototype)
2896+
```
2897+
2898+
- A: `{ constructor: ...}` `{ constructor: ...}`
2899+
- B: `{}` `{ constructor: ...}`
2900+
- C: `{ constructor: ...}` `{}`
2901+
- D: `{ constructor: ...}` `undefined`
2902+
2903+
<details><summary><b>Antwort</b></summary>
2904+
<p>
2905+
2906+
#### Antwort: D
2907+
2908+
Reguläre Funktionen wie `giveLydiaPizza` haben eine `prototype` Property, die ein Objekt (Prototype Object) mit einem `constructor` ist. Arrow Funktionen dagegen (wie `giveLydiaChocolate`) haben keinen `prototype`. `undefined` wird ausgegeben, wenn wir versuchen den `prototype` mit `giveLydiaChocolate.prototype` aufzurufen.
2909+
2910+
</p>
2911+
</details>
2912+
2913+
---
2914+
2915+
###### 93. Was ist der Output?
2916+
2917+
```javascript
2918+
const person = {
2919+
name: "Lydia",
2920+
age: 21
2921+
}
2922+
2923+
for (const [x, y] of Object.entries(person)) {
2924+
console.log(x, y)
2925+
}
2926+
```
2927+
2928+
- A: `name` `Lydia` und `age` `21`
2929+
- B: `["name", "Lydia"]` und `["age", 21]`
2930+
- C: `["name", "age"]` und `undefined`
2931+
- D: `Error`
2932+
2933+
<details><summary><b>Antwort</b></summary>
2934+
<p>
2935+
2936+
#### Antwort: A
2937+
2938+
`Object.entries(person)` gibt ein Array mit verschachtelten Arrays der Keys aus:
2939+
2940+
`[ [ 'name', 'Lydia' ], [ 'age', 21 ] ]`
2941+
2942+
Mit der `for-of` Schleife iterieren wir über jedes Element in dem Array, in diesem Fall die verschachtelten Arrays. Wir können die verschachtelten Arrays mit `const [x, y]` in der for-of Schleife destrukturieren. `x` ist gleich dem ersten Element, `y` ist gleich dem zweiten Element in dem verschachtelten Array.
2943+
2944+
Das erste verschachtelte Array ist `[ "name", "Lydia" ]`. `x` ist gleich `"name"` und `y` gleich `"Lydia"`, was geloggt wird.
2945+
Das zweite verschachtelte Array ist `[ "age", 21 ]`. `x` ist gleich `"age"` und `y` ist gleich `21`, was geloggt wird.
2946+
2947+
</p>
2948+
</details>
2949+
2950+
---
2951+
2952+
###### 94. Was ist der Output?
2953+
2954+
```javascript
2955+
function getItems(fruitList, ...args, favoriteFruit) {
2956+
return [...fruitList, ...args, favoriteFruit]
2957+
}
2958+
2959+
getItems(["banana", "apple"], "pear", "orange")
2960+
```
2961+
2962+
- A: `["banana", "apple", "pear", "orange"]`
2963+
- B: `[["banana", "apple"], "pear", "orange"]`
2964+
- C: `["banana", "apple", ["pear"], "orange"]`
2965+
- D: `SyntaxError`
2966+
2967+
<details><summary><b>Antwort</b></summary>
2968+
<p>
2969+
2970+
#### Antwort: D
2971+
2972+
`...args` ist ein Rest-Parameter. Der Wert des Rest-Parameters ist ein Array mit allen weiteren Argumenten **und kann nur der letzte Parameter sein**! In diesem Beispiel war der Rest-Parameter das zweite Argument, was nicht möglich ist und daher einen Syntax Error ausgibt.
2973+
2974+
```javascript
2975+
function getItems(fruitList, favoriteFruit, ...args) {
2976+
return [...fruitList, ...args, favoriteFruit]
2977+
}
2978+
2979+
getItems(["banana", "apple"], "pear", "orange")
2980+
```
2981+
2982+
Dieses Beispiel würde funktionieren und `[ 'banana', 'apple', 'orange', 'pear' ]` ausgeben.
2983+
</p>
2984+
</details>

0 commit comments

Comments
 (0)