Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions 1-js/02-first-steps/06-type-conversions/2-WAT/solution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
```js no-beautify
Comment thread
dobernike marked this conversation as resolved.
Outdated
[] + [] === ""
Плюс говорит о строковой операции, а для строковых операций вызывается toString, который переводит массив в пустую строку

[] + {} === "[object Object]"
тот же принцип, что и в первом примере — плюс переводит объекты в строку, поэтому на обоих операторах вызывается toString

{} + [] === 0
пустые фигурные скобки трактуются как пустой блок кода, а не как объект, поэтому их можно отбросить. Остается +[]: приведение через унарный плюс массива в число. Пустой массив приводится в число как 0

{} + {} === "[object Object][object Object]"
одни браузеры считают это сложением двух объектов, в то время как другие — опускают пустой блок кода, оставляя объект, переведенный в число унарным плюсом, что, логично, дает NaN
Comment thread
dobernike marked this conversation as resolved.
Outdated

Array(3).join("wat" - 1) === "NaNNaN"
join возвращает строку из элементов массива с разделителем, переданным параметром. "wat" - 1 даст NaN, который переводится в строку как NaN

```
17 changes: 17 additions & 0 deletions 1-js/02-first-steps/06-type-conversions/2-WAT/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
importance: 5

---

# WAT

Если вы уже знаете что такое массив и объект, попробуйте ответить, что выведут примеры из одноименного доклада.
Comment thread
dobernike marked this conversation as resolved.
Outdated

```js no-beautify
[] + []
[] + {}
{} + []
{} + {}
Array(3).join("wat" - 1)
```

Когда закончите – сверьтесь с решением.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
```js no-beautify
'5' - 3 === 2 // (1)
'5' + 3 === '53' // (2)
'5' - '4' === 1 // (3)
'5' + + '5' === '55' // (4)
'foo' + + 'foo' === 'fooNaN' // (5)
'5' + - '2' === '5-2' // (6)
'5' + - + - - + - - + + - + - + - + - - - '-2' === '52' // (7)
let x = 3;
'5' + x - x === 50 // (8)
'5' - x + x === 5 // (9)
```

1. Оператор `-` является числовым, строка `'5'` переводится в число и получается `5 - 3`.
2. Оператор `+` используется для строкового и математического, больший приоритет у строкового из-за этого `3` становится строкой и получается `'5' + '3'`.
Comment thread
dobernike marked this conversation as resolved.
Outdated
3. Оператор `-` является числовым, строки преобразуются в числа и получается `5 - 4`.
Comment thread
dobernike marked this conversation as resolved.
Outdated
4. Приоритет у данных операторов одинаковый, из-за этого происходит следующие: берется первая часть `'5' +` и ожидается вычисление `+ '5'` (перевод строки в число) и выходит `'5' + 5`
Comment thread
dobernike marked this conversation as resolved.
Outdated
5. Также как и в предыдущем выражении, за одним но, вторая часть `+ 'foo'` пытается приобразовать `'foo'` в число и выходит `NaN`.
Comment thread
dobernike marked this conversation as resolved.
Outdated
6. Также как и в предыдущем выражении, но вторая часть `- '2'` преобразовывается в число `-2` и получается `'5' + -2`.
Comment thread
dobernike marked this conversation as resolved.
Outdated
7. Сначала `'5' +` происходит строковое сложение, то есть в итоге `'5'` в начале так и останется, давайте посмотрим вторую часть: как можно видеть используются множетсва унарных операторов `+` и `-`, унарный `+` просто приводит строку в число, а унарный `-` приводит строку в число и меняет знак на противоположный, следовательно унарный `+` в данном выражении можно не считать, а просто посчитать количество `-`, выходит 11 знаков `-` что является нечетным числом и в конечном итоге дает 1 `-` (если четное число, то `+`), далее делаем операцию `- -2` и получаем в итоге `'5' + 2`.
Comment thread
dobernike marked this conversation as resolved.
Outdated
8. `'5' + 3 = '53'` строковое сложение, далее `'53' - 3`.
9. `'5' - 3 = 2` математическое вычитание, далее `2 + 3`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
importance: 5

---

# Продвинутое преобразование типов

Попробуйте ответить, что выведут примеры из популярной картинки.
Comment thread
dobernike marked this conversation as resolved.
Outdated

```js no-beautify
'5' - 3
'5' + 3
'5' - '4'
'5' + + '5'
'foo' + + 'foo'
'5' + - '2'
'5' + - + - - + - - + + - + - + - + - - - '-2'
let x = 3;
'5' + x - x
'5' - x + x
```

Когда закончите – сверьтесь с решением.