init
This commit is contained in:
parent
06f61d8ce8
commit
f301cb744d
2271 changed files with 103162 additions and 0 deletions
|
@ -0,0 +1,13 @@
|
|||
Каждая строчка решения соответствует одному шагу задачи:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var admin, name; // две переменных через запятую
|
||||
|
||||
name = "Василий";
|
||||
|
||||
admin = name;
|
||||
|
||||
alert(admin); // "Василий"
|
||||
```
|
||||
|
10
01-js/02-first-steps/03-variables/01-hello-variables/task.md
Normal file
10
01-js/02-first-steps/03-variables/01-hello-variables/task.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Работа с переменными
|
||||
|
||||
[importance 2]
|
||||
|
||||
<ol>
|
||||
<li>Объявите две переменные: `admin` и `name`. </li>
|
||||
<li>Запишите в `name` строку `"Василий"`. </li>
|
||||
<li>Скопируйте значение из `name` в `admin`.</li>
|
||||
<li>Выведите `admin` (должно вывести "Василий").</li>
|
||||
</ol>
|
252
01-js/02-first-steps/03-variables/article.md
Normal file
252
01-js/02-first-steps/03-variables/article.md
Normal file
|
@ -0,0 +1,252 @@
|
|||
# Переменные
|
||||
|
||||
В зависимости от того, для чего вы делаете скрипт, понадобится работать с информацией.
|
||||
|
||||
Если это электронный магазин - то это товары, корзина. Если чат - посетители, сообщения и так далее.
|
||||
|
||||
Чтобы хранить информацию, используются *переменные*.
|
||||
[cut]
|
||||
## Переменная
|
||||
|
||||
***Переменная* состоит из имени и выделенной области памяти, которая ему соответствует**.
|
||||
|
||||
Для *объявления* или, другими словами, *создания переменной* используется ключевое слово `var`:
|
||||
|
||||
```js
|
||||
var message;
|
||||
```
|
||||
|
||||
После объявления, можно записать в переменную данные:
|
||||
|
||||
```js
|
||||
var message;
|
||||
message = 'Привет'; // сохраним в переменной строку
|
||||
```
|
||||
|
||||
Эти данные будут сохранены в соответствующей области памяти и в дальнейшем доступны при обращении по имени:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var message;
|
||||
message = 'Привет';
|
||||
|
||||
alert(message); // выведет содержимое переменной
|
||||
```
|
||||
|
||||
Для краткости можно совместить объявление переменной и запись данных:
|
||||
|
||||
```js
|
||||
var message = 'Привет';
|
||||
```
|
||||
|
||||
Можно даже объявить несколько переменных сразу:
|
||||
|
||||
```js
|
||||
var user = 'Вася', age = 25, message = 'Привет';
|
||||
```
|
||||
|
||||
### Аналогия из жизни
|
||||
|
||||
**Проще всего понять переменную, если представить ее как "коробку" для данных, с уникальным именем.**
|
||||
|
||||
Например, переменная `message` - это коробка, в которой хранится значение `"Привет"`:
|
||||
|
||||
<img src="box-message-hello.png">
|
||||
|
||||
В коробку можно положить любое значение, а позже - поменять его. Значение в переменной можно изменять сколько угодно раз:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var message;
|
||||
|
||||
message = 'Привет';
|
||||
|
||||
message = 'Мир'; // заменили значение
|
||||
|
||||
alert(message);
|
||||
```
|
||||
|
||||
<img src="box-trans1.png">
|
||||
|
||||
При изменении значения старое содержимое переменной удаляется.
|
||||
|
||||
[smart]
|
||||
Существуют [функциональные](http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) языки программирования, в которых значение переменной менять нельзя. Например, [Scala](http://www.scala-lang.org/) или [Erlang](http://www.erlang.org/).
|
||||
|
||||
В таких языках положил один раз значение в коробку - и оно хранится там вечно, ни удалить ни изменить. А нужно что-то другое сохранить - изволь создать новую коробку (объявить новую переменную), повторное использование невозможно.
|
||||
|
||||
С виду -- не очень удобно, но, как ни странно, и на таких языках вполне можно успешно программировать. Более того, оказывается, что в ряде областей, например в распараллеливании вычислений, они имеют преимущества. Изучение какого-нибудь функционального языка рекомендуется для расширения кругозора.
|
||||
[/smart]
|
||||
|
||||
### Имена переменных [#variable-naming]
|
||||
|
||||
На имя переменной в JavaScript наложены всего два ограничения.
|
||||
<ol>
|
||||
<li>Имя может состоять из: букв, цифр, символов `$` и `_`</li>
|
||||
<li>Первый символ не должен быть цифрой.</li>
|
||||
</ol>
|
||||
|
||||
Например:
|
||||
|
||||
```js
|
||||
var myName;
|
||||
var test123;
|
||||
```
|
||||
|
||||
**Что особенно интересно -- доллар `'$'` и знак подчеркивания `'_'` являются такими же обычными символами, как буквы:**
|
||||
|
||||
```js
|
||||
//+ run untrusted
|
||||
var $ = 1; // объявили переменную с именем '$'
|
||||
var _ = 2; // переменная с именем '_'
|
||||
|
||||
alert($ + _); // 3
|
||||
```
|
||||
|
||||
А такие переменные были бы неправильными:
|
||||
|
||||
```js
|
||||
var 1a; // начало не может быть цифрой
|
||||
|
||||
var my-name; // дефис '-' не является разрешенным символом
|
||||
```
|
||||
|
||||
[smart header="Регистр букв имеет значение"]
|
||||
Переменные `apple` и `AppLE` - две разные переменные.
|
||||
[/smart]
|
||||
|
||||
[smart header="Русские буквы допустимы, но не рекомендуются"]
|
||||
|
||||
В названии переменных можно использовать и русские буквы, например:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var имя = "Вася";
|
||||
alert(имя); // "Вася"
|
||||
```
|
||||
|
||||
Технически, ошибки здесь нет, но на практике сложилась традиция использовать в именах только английские буквы.
|
||||
[/smart]
|
||||
|
||||
[warn header="Зарезервированные имена"]
|
||||
|
||||
Существует список зарезервированных слов, которые нельзя использовать для переменных, так как они используются самим языком, например: `var, class, return, export` и др.
|
||||
|
||||
Некоторые такие слова, например, `export`, не используются в современном JavaScript, но они зарезервированы на будущее.
|
||||
|
||||
Например, такой пример выдаст синтаксическую ошибку:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var class = 5; // ошибка, слово зарезервировано
|
||||
alert(class);
|
||||
```
|
||||
|
||||
[/warn]
|
||||
|
||||
|
||||
### Копирование значений
|
||||
|
||||
Переменные в JavaScript могут хранить не только строки, но и другие данные, например, числа.
|
||||
|
||||
Объявим две переменные, положим в одну -- строку, а в другую -- число:
|
||||
|
||||
```js
|
||||
var num = 100500;
|
||||
var message = 'Привет';
|
||||
```
|
||||
|
||||
При этом в любой момент значение можно скопировать из одной переменной в другую:
|
||||
|
||||
```js
|
||||
var num = 100500;
|
||||
var message = 'Привет';
|
||||
|
||||
*!*
|
||||
message = num;
|
||||
*/!*
|
||||
```
|
||||
|
||||
При копировании значение из `num` перезаписывает текущее в `message`.
|
||||
|
||||
**В "коробке" `message` изменится значение**:
|
||||
|
||||
<img src="box-trans2.png">
|
||||
|
||||
После этого присваивания в обеих коробках `num` и `message` находится одно и то же значение `100500`.
|
||||
|
||||
## Важность директивы var
|
||||
|
||||
В JavaScript вы можете создать переменную и без `var`, достаточно просто присвоить ей значение:
|
||||
|
||||
```js
|
||||
x = "value"; // переменная создана, если ее не было
|
||||
```
|
||||
|
||||
Технически, это не вызовет ошибки, но делать так все-таки не стоит.
|
||||
|
||||
**Всегда определяйте переменные через `var`**.
|
||||
|
||||
Это хороший тон в программировании и помогает избежать ошибок.
|
||||
|
||||
[warn header="Ошибка в IE8- без `var`"]
|
||||
Если же вы собираетесь поддерживать IE8-, то у меня для вас ещё одна причина всегда использовать `var`.
|
||||
|
||||
Следущий документ в IE8- ничего не выведет, будет ошибка:
|
||||
|
||||
```html
|
||||
<div id="test"></div>
|
||||
<script>
|
||||
*!*
|
||||
test = 5; // здесь будет ошибка!
|
||||
*/!*
|
||||
alert(test); // не сработает
|
||||
</script>
|
||||
```
|
||||
|
||||
Это потому, что переменная `test` не объявлена через `var` и совпадает с `id` элемента `<div>`. Даже не спрашивайте почему -- это ошибка в браузере IE до версии 9.
|
||||
|
||||
Самое "забавное" -- то, что такая ошибка присвоения значений будет только в IE8- и только если на странице присутствует элемент с совпадающим с именем `id`.
|
||||
|
||||
Такие ошибки особенно "весело" исправлять и отлаживать.
|
||||
|
||||
Вывод простой -- всегда объявляем переменные через `var`, и сюрпризов не будет. Даже в старых IE.
|
||||
[/warn]
|
||||
|
||||
## Константы
|
||||
|
||||
*Константа* -- это переменная, которая никогда не меняется. Как правило, их называют большими буквами, через подчёркивание. Например:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var COLOR_RED = "#F00";
|
||||
var COLOR_GREEN = "#0F0";
|
||||
var COLOR_BLUE = "#00F";
|
||||
var COLOR_ORANGE = "#FF7F00";
|
||||
|
||||
var color = COLOR_ORANGE;
|
||||
alert(color); // #FF7F00
|
||||
```
|
||||
|
||||
Технически, константа является обычной переменной, то есть её *можно* изменить. Но мы *договариваемся* этого не делать.
|
||||
|
||||
Зачем нужны константы? Почему бы просто не писать `var color = "#FF7F00"`?
|
||||
|
||||
<ol>
|
||||
<li>Во-первых, константа `COLOR_ORANGE` -- это понятное имя. По присвоению `var color="#FF7F00"` непонятно, что цвет -- оранжевый. Иными словами, константа `COLOR_ORANGE` является "понятным псевдонимом" для значения `#FF7F00`.</li>
|
||||
<li>Во-вторых, опечатка в строке, особенно такой сложной как `#FF7F00`, может быть не замечена, а в имени константы её допустить куда сложнее.</li>
|
||||
</ol>
|
||||
|
||||
**Константы используют вместо строк и цифр, чтобы сделать программу понятнее и избежать ошибок.**
|
||||
|
||||
## Итого
|
||||
|
||||
<ul>
|
||||
<li>В JavaScript можно объявлять переменные для хранения данных. Это делается при помощи `var`.</li>
|
||||
<li>Технически, можно просто записать значение и без объявления переменной, однако по ряду причин это не рекомендуется.</li>
|
||||
<li>Вместе с объявлением можно сразу присвоить значение: `var x = 10`.</li>
|
||||
<li>Переменные, которые названы `БОЛЬШИМИ_БУКВАМИ`, являются константами, то есть никогда не меняются. Как правило, они используются для удобства, чтобы было меньше ошибок.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
BIN
01-js/02-first-steps/03-variables/box-message-hello.png
Executable file
BIN
01-js/02-first-steps/03-variables/box-message-hello.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
BIN
01-js/02-first-steps/03-variables/box-trans1.png
Executable file
BIN
01-js/02-first-steps/03-variables/box-trans1.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
01-js/02-first-steps/03-variables/box-trans2.png
Executable file
BIN
01-js/02-first-steps/03-variables/box-trans2.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
Loading…
Add table
Add a link
Reference in a new issue