Skip to content

Address some possible issues in 1.2.11 #1103

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ alert( alert(1) || 2 || alert(3) );

Вызов `alert` не возвращает значения, или, иначе говоря, возвращает `undefined`.

1. Первый оператор ИЛИ `||` выполнит первый `alert(1)`.
1. Первый оператор ИЛИ `||` вычислит свой левый операнд `alert(1)`. Это приведёт к показу первого сообщения, `1`.
2. Получит `undefined` и пойдёт дальше, ко второму операнду в поисках истинного значения.
3. Так как второй операнд `2` является истинным, то вычисления завершатся, результатом `undefined || 2` будет `2`, которое будет выведено внешним `alert( .... )`.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Ответ: `null`, потому что это первое "ложное" значение из списка.
Ответ: `null`, потому что это первое ложное значение из списка.

```js run
alert( 1 && null && 2 );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
alert( alert(1) && alert(2) );
```

Вызов `alert` не возвращает значения, или, иначе говоря, возвращает `undefined`.
Вызов `alert` возвращает `undefined` (он просто показывает сообщение, поэтому ничего важного не возвращает).

Поэтому до правого `alert `дело не дойдёт, вычисления закончатся на левом.
Следовательно, оператор `&&` вычисляет левый операнд (выводит `1`) и тут же останавливается, так как `undefined` является ложным значением. А `&&` как раз ищет ложное значение и возвращает его, так что его миссия выполнена.

Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ alert( null || 2 && 3 || 4 );
null || 3 || 4
```

Теперь результатом является первое истинное значение: `3`.
Теперь результатом является первое истинное значение: `3`.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ importance: 5

---

# Что выведет этот код?
# Результат ИЛИ И ИЛИ?

Что выведет код ниже?

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ importance: 3

# Проверка значения вне диапазона

Напишите условие `if` для проверки, что значение переменной `age` НЕ находится в диапазоне `14` и `90` включительно.
Напишите условие `if` для проверки, что значение переменной `age` НЕ находится в диапазоне между `14` и `90` включительно.

Напишите два варианта: первый с использованием оператора НЕ `!`, второй – без этого оператора.
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
Ответ: первое и третье выполнятся.
Ответ: первый и третий выполнятся.

Подробности:

```js run
// Выполнится.
// Результат -1 || 0 = -1, в логическом контексте true
if (-1 || 0) alert( 'first' );
if (-1 || 0) alert( 'первый' );

// Не выполнится
// -1 && 0 = 0, в логическом контексте false
if (-1 && 0) alert( 'second' );
if (-1 && 0) alert( 'второй' );

// Выполнится
// оператор && имеет больший приоритет, чем ||
// так что -1 && 1 выполнится раньше
// вычисления: null || -1 && 1 -> null || 1 -> 1
if (null || -1 && 1) alert( 'third' );
// Оператор && имеет больший приоритет, чем ||
// так что -1 && 1 выполнится раньше, производя последовательность:
// null || -1 && 1 -> null || 1 -> 1
if (null || -1 && 1) alert( 'третий' );
```
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ importance: 5

---

# Вопрос о "if"
# Вопрос про "if"

Какие из перечисленных ниже `alert` выполнятся?

Какие конкретно значения будут результатами выражений в условиях `if(...)`?

```js
if (-1 || 0) alert( 'first' );
if (-1 && 0) alert( 'second' );
if (null || -1 && 1) alert( 'third' );
if (-1 || 0) alert( 'первый' );
if (-1 && 0) alert( 'второй' );
if (null || -1 && 1) alert( 'третий' );
```

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@


```js run demo
let userName = prompt("Кто там?", '');
let userName = prompt('Кто там?', '');

if (userName == 'Админ') {
if (userName === 'Админ') {

let pass = prompt('Пароль?', '');

if (pass == 'Я главный') {
if (pass === 'Я главный') {
alert( 'Здравствуйте!' );
} else if (pass == '' || pass == null) {
} else if (pass === '' || pass === null) {
alert( 'Отменено' );
} else {
alert( 'Неверный пароль' );
}

} else if (userName == '' || userName == null) {
} else if (userName === '' || userName === null) {
alert( 'Отменено' );
} else {
alert( "Я вас не знаю" );
alert( 'Я вас не знаю' );
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@ importance: 3

Напишите код, который будет спрашивать логин с помощью `prompt`.

Если посетитель вводит "Админ", то `prompt` запрашивает пароль, если ничего не введено или нажата клавиша `key:Esc` – показать "Отменено", в противном случае отобразить "Я вас не знаю".
Если посетитель вводит `"Админ"`, то `prompt` запрашивает пароль. Если ничего не введено или нажата клавиша `key:Esc` – показать "Отменено". В других случаях отобразить "Я вас не знаю".

Пароль проверять так:

- Если введён пароль "Я главный", то выводить "Здравствуйте!",
- Иначе – "Неверный пароль",
- При отмене – "Отменено".
- Другая строка – "Неверный пароль",
- При пустой строке или отмене – "Отменено".

Блок-схема:

![](ifelse_task.svg)

Для решения используйте вложенные блоки `if`. Обращайте внимание на стиль и читаемость кода.

Подсказка: передача пустого ввода в приглашение `prompt` возвращает пустую строку `''`. Нажатие клавиши `key:Esc` во время запроса возвращает`null`.
Подсказка: передача пустого ввода в приглашение `prompt` возвращает пустую строку `''`. Нажатие клавиши `key:Esc` во время запроса возвращает `null`.

[demo]
Loading