Skip to content

Commit 9370751

Browse files
authored
Merge pull request lydiahallie#198 from oshliaer/russian_updates_2019_08-1
Russian. Updates 2019-08/1
2 parents df9e104 + 1e9be31 commit 9370751

File tree

1 file changed

+256
-2
lines changed

1 file changed

+256
-2
lines changed

ru-RU/README_ru-RU.md

Lines changed: 256 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,7 +1669,7 @@ let x = y;
16691669

16701670
---
16711671

1672-
###### <a name=20190629> </a>55. Какой будет вывод?
1672+
###### 55. Какой будет вывод?
16731673

16741674
```javascript
16751675
class Dog {
@@ -2469,7 +2469,7 @@ console.log(addFunction(5 * 2));
24692469

24702470
---
24712471

2472-
###### <a name=20190726></a>79. Какой будет вывод?
2472+
###### 79. Какой будет вывод?
24732473

24742474
```javascript
24752475
const myLifeSummedUp = ["", "💻", "🍷", "🍫"]
@@ -2728,3 +2728,257 @@ function getName(name) {
27282728

27292729
</p>
27302730
</details>
2731+
2732+
---
2733+
2734+
###### <a name=20190805></a>87. Какой будет вывод?
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>Ответ</b></summary>
2746+
<p>
2747+
2748+
#### Ответ: B
2749+
2750+
Чтобы получить символ по определенному индексу в строке, вы можете использовать скобочную нотацию. Первый символ в строке имеет индекс 0 и т.д. В этом случае мы хотим получить элемент с индексом 0, символ `'I'`, который выводится в лог.
2751+
2752+
Обратите внимание, что этот метод не поддерживается в IE7 и ниже. В этом случае используйте `.charAt()`
2753+
2754+
</p>
2755+
</details>
2756+
2757+
---
2758+
2759+
###### 88. Какой будет вывод?
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>Ответ</b></summary>
2775+
<p>
2776+
2777+
#### Ответ: B
2778+
2779+
Вы можете установить значение параметра по умолчанию равным другому параметру функции, если они были определены _до_ параметров по умолчанию. Мы передаем значение `10` в функцию `sum`. Если функция `sum` принимает только один аргумент, это означает, что значение для `num2` не передано, и в этом случае значение `num1` равно переданному значению `10`. Значением по умолчанию `num2` является значение `num1`, которое равно `10`. `num1 + num2` возвращает `20`.
2780+
2781+
Если вы пытаетесь установить значение параметра по умолчанию равным параметру, который определен _после_ (справа), то значение параметра еще не было инициализировано; это приведет к ошибке.
2782+
2783+
</p>
2784+
</details>
2785+
2786+
---
2787+
2788+
###### 89. Какой будет вывод?
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: Global object of `module.js`
2805+
2806+
<details><summary><b>Ответ</b></summary>
2807+
<p>
2808+
2809+
#### Ответ: A
2810+
2811+
С синтаксисом `import * as name` мы импортируем _все exports_ из файла `module.js` в файл `index.js`, тогда и создается новый объект с именем `data`. В файле `module.js` есть два экспорта: экспорт по умолчанию и именованный экспорт. Экспорт по умолчанию - это функция, которая возвращает строку `"Hello World"`, а именованный экспорт - это переменная с именем `name`, которая имеет значение строки `"Lydia"`.
2812+
2813+
Объект `data` имеет свойство `default` для экспорта по умолчанию, другие свойства имеют имена именованных экспортов и их соответствующие значения.
2814+
2815+
</p>
2816+
</details>
2817+
2818+
---
2819+
2820+
###### 90. Какой будет вывод?
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>Ответ</b></summary>
2839+
<p>
2840+
2841+
#### Ответ: C
2842+
2843+
Классы являются синтаксическим сахаром для конструкторов функций. Эквивалентом класса `Person` в качестве конструктора функции будет:
2844+
2845+
```javascript
2846+
function Person() {
2847+
this.name = name
2848+
}
2849+
```
2850+
2851+
Вызов конструктора функции с `new` приводит к созданию экземпляра `Person`, ключевое слово `typeof` возвращает `"object"` для экземпляра. `typeof member` возвращает `"объект"`.
2852+
2853+
</p>
2854+
</details>
2855+
2856+
---
2857+
2858+
###### 91. Какой будет вывод?
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>Ответ</b></summary>
2872+
<p>
2873+
2874+
#### Ответ: D
2875+
2876+
Метод `.push` возвращает _новую длину_ массива, а не сам массив! Устанавливая `newList` равным `[1, 2, 3].push(4)`, мы устанавливаем `newList` равным новой длине массива: `4`.
2877+
2878+
Затем мы пытаемся использовать метод `.push` для `newList`. Поскольку `newList` является числовым значением `4`, мы не можем использовать метод `.push`: выдается ошибка TypeError.
2879+
2880+
</p>
2881+
</details>
2882+
2883+
---
2884+
2885+
###### 92. Какой будет вывод?
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>Ответ</b></summary>
2904+
<p>
2905+
2906+
#### Ответ: D
2907+
2908+
Обычные функции, такие как функция `giveLydiaPizza`, имеют свойство `prototype`, которое является объектом (прототипом объекта) со свойством `constructor`. Однако функции со стрелками, такие как функция `giveLydiaChocolate`, не имеют этого свойства `prototype`. `undefined` возвращается при попытке доступа к свойству `prototype` с использованием `giveLydiaChocolate.prototype`.
2909+
2910+
</p>
2911+
</details>
2912+
2913+
---
2914+
2915+
###### 93. Какой будет вывод?
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` and `age` `21`
2929+
- B: `["name", "Lydia"]` and `["age", 21]`
2930+
- C: `["name", "age"]` and `undefined`
2931+
- D: `Error`
2932+
2933+
<details><summary><b>Ответ</b></summary>
2934+
<p>
2935+
2936+
#### Ответ: A
2937+
2938+
`Object.entries (person)` возвращает массив вложенных массивов, содержащий ключи и объекты:
2939+
2940+
`[ [ 'name', 'Lydia' ], [ 'age', 21 ] ]`
2941+
2942+
Используя цикл `for-of`, мы можем перебирать каждый элемент массива, в данном случае подмассивы. Мы можем мгновенно деструктурировать подмассивы в цикле for, используя `const [x, y]`. `x` равен первому элементу в подмассиве, `y` равен второму элементу в подмассиве.
2943+
2944+
Первым подмассивом является `[ "name", "Lydia" ]`, где `x` равно `"name"`, и `y` равно `"Lydia"`, которые выводятся в лог.
2945+
Вторым подмассивом является `[ "age", 21 ]`, где `x` равно `"age"`, и `y` равно `21`, которые выводятся в лог.
2946+
2947+
</p>
2948+
</details>
2949+
2950+
---
2951+
2952+
###### 94. Какой будет вывод?
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>Ответ</b></summary>
2968+
<p>
2969+
2970+
#### Ответ: D
2971+
2972+
`... args` - прочие параметры. Значение прочих параметров - это массив, содержащий все оставшиеся аргументы **и может быть передан только последним**! В этом примере прочие параметры были вторым аргументом. Это невозможно, и это приведет к синтаксической ошибке.
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+
Приведенный выше пример работает. Это возвращает массив `[ 'banana', 'apple', 'orange', 'pear' ]`
2983+
</p>
2984+
</details>

0 commit comments

Comments
 (0)