Инструменты пользователя

Инструменты сайта


sintaksis_javascript

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

sintaksis_javascript [2019/06/01 20:58]
sintaksis_javascript [2020/06/13 13:47] (текущий)
Строка 1: Строка 1:
 +====== Синтаксис JavaScript. Рекомендации. ======
 +
 +{{ :do-while_sintaksis_javascript.png?nolink |}}
 +  * [[JavaScript]] чувствителен к регистру символов. Это означает, что имена Name и name представляют собой совершенно разные имена переменных или функций. Чувствительность к регистру касается как стандартных, так и пользовательских элементов сценария.
 +  * Имена переменных чувствительны к регистру; имена переменных должны состоять из букв латинского алфавита, цифр и знаков "_"; имена переменных не могут начинаться с цифры; переменная должна быть объявлена до того, как вы начнете ее использовать;
 +  * Принято если переменная состоит из двух слов, то первое слово пишется с маленькой буквы, например: timerId.
 +  * **Имена CSS в JavaScript.** В именах многих атрибутов [[CSS]] стилей, таких как font-family, содержатся дефисы. В JavaScript дефис интерпретируется как знак минус, поэтому нельзя на писать, например, такое выражение: element.style.font-family = "sans serif"; Таким образом, если имя CSS атрибута содержит дефисы, имя свойства объекта JavaScript образуется путем удаления дефисов и перевода в верхний регистр буквы, непосредственно следующей за каждым из них. Другими словами, атрибут border-left-width доступен через свойство borderLeftWidth, а к атрибуту font-family можно обратиться следующим образом:<file css>
 +element.style.fontFamily = "sans-serif";
 +</file>
 +  * Операторы должны разделяться между собой символом ";" хотя это и не является обязательным.
 +  * Операторы могут объединяться в блоки. Для этого их следует размещать в фигурных скобках: "{" и "}". В этом случае несколько операторов рассматриваются интерпретатором и выполняются как один составной оператор. При этом разделитель ";" после блока не ставится.
 +  * В текст скрипта можно включать однострочные и блочный комментарии, аналогично С++.
 +  * В JavaScript значению "ложь" соответствует не только логический литерал false, но и несколько эквивалентов других типов данных: 0, "", null, undefined. Все остальные значения считаются эквивалентом "истины" - true. Таким образом, в логических выражениях могут участвовать значения не булевого типа.
 +  * Если браузер не понимает JS и вы не хотите чтобы скрипт выводился как обычный текст, применяют такой приём с комментариями:<file>
 +<script>
 +<!--
 +alert ('Как тебя зовут?');
 +//-->
 +</script>
 +</file>
 +  * Пробелы и переводы строк в JavaScript не обязательны. Можно написать программу в одну строку. Роль пробелов в блоках – отделять их от остальной программы.
 +
 +====== Переменные в JavaScript ======
 +
 +  * Переменные в JavaScript объявляются при помощи ключевого слова var, которое располагается в начале объявления. При объявлении переменной можно присвоить значение (проинициализировать). Если переменная не была проинициализирована при объявлении, она будет содержать специальное значение - **undefined** (неопределено). В некоторых случаях переменную инициализировать все же необходимо, но ей не нужно присваивать конкретное значение. В такой ситуации можно воспользоваться еще одним специальным значением **null** (пусто). За один раз можно объявить более одной переменной, в таком случае они разделяются запятой ",". Объявление заканчивается символом ";".Шаблон объявления переменных имеет следующий вид (в квадратные скобки [] взяты необязательные части конструкции):<file>
 +var имя_переменной [= значение] [, имя_переменной [= значение] ... ];
 +</file> Ниже приводятся несколько примеров объявления переменных:<file>
 +var angle; //переменная объявлена но не проинициализирована
 +var counter_1 = 0; //переменная объявлена и проинициализирована значением 0
 +var FirstName, LastName = "Иванов", age=20; //объявление нескольких переменных одновременно
 +</file>
 +
 +
 +====== Операторы цикла for, while, do ======
 +  * Синтаксис цикла **for**:<file>
 +for (A; B; I){S} 
 +
 +где
 +A - первоначальное выражение, 
 +B - условие продолжения. Если это выражение ложно, то выполнение цикла завершается,
 +I - выражение инкремента, 
 +{} - тело цикла, 
 +S - операторы.
 +</file>**Пример**. В цикле перебирается строка с 0 -ого элемента и до последнего символа.<file javascript>
 +var str='Моя строка';
 +    for (i = 0; i < str.length; i++) {
 +    console.log(str[i]);
 +}
 +</file>
 +  * Синтаксис цикл **while**:<file>
 +while (B){S} 
 +где
 +B - условие продолжения. Если это выражение ложно, то выполнение цикла завершается,
 +{} - тело цикла, 
 +S - операторы.
 +</file>Иными словами, операторы S, выполняются до тех пор, пока условие B не станет ложным. Например<file javascript>
 +var number = 0;
 +while (number <= 12) {
 + console.log(number);
 + number = number + 2;
 +}</file>
 +  * Синтаксис цикл **do**. Он похож на цикл while. Отличается только в одном: цикл do всегда выполняет тело хотя бы один раз, а проверяет условие после первого выполнения. Поэтому и тестируемое выражение записывают после тела цикла:<file javascript>
 +do {
 +   var name = prompt("Who are you?");
 +} while (!name);
 +console.log(name);
 +</file>Эта программа заставляет ввести имя. Она спрашивает его снова и снова, пока не получит что-то кроме пустой строки. Добавление "!" превращает значение в булевское и затем применяет логическое отрицание, а все строки, кроме пустой, преобразуются в булевское true.
 +
 +====== Тернарный оператор ======
 +
 +Для избежания ошибок сравнение лучше заключать в скобки.
 +Например, на странице есть элемент чекбокс <input type="checkbox" checked id="checknodns" /> и нужно проверить его состояние 
 +<file>
 +var checknodns = document.getElementById('checknodns');
 +var test = (checknodns.checked) ? "true" : "false";
 +</file>
 +
 +====== switch case ======
 +
 +Когда выполняется инструкция switch, она вычисляет значение выражения, а затем ищет метку case, соответствующую этому значению. Если метка найдена, исполняется блок кода, начиная с первой инструкции, следующей за меткой case. Если метка case с соответствующим значением не найдена, исполнение начинается с первой инструкции, следующей за специальной меткой default:. Если метки default: нет, блок кода пропускается целиком.
 +
 +Следующая инструкция switch эквивалентна повторяющимся инструкциям if/else:
 +<file javascript>
 +switch(n) {
 +case 1:
 +// Выполняется, если n == 1
 +// Исполняем блок кода 1.
 +break; // Здесь останавливаемся
 +case 2:
 +// Выполняется, если n == 2
 +// Исполняем блок кода 2.
 +break; // Здесь останавливаемся
 +case 3:
 +// Выполняется, если n == 3
 +// Исполняем блок кода 3.
 +break; // Здесь останавливаемся
 +default: // Если все остальное не подходит...
 +// Исполняем блок кода 4.
 +break; // Здесь останавливаемся
 +}
 +</file>
 +Инструкция break приводит к передаче управления в конец инструкции switch или цикла. Конструкции case в инструкции switch задают только начальную точку исполняемого кода, но не задают никаких конечных точек. В случае отсутствия инструкций break инструкция switch начинает исполнение блока кода с метки case, соответствующей значению выражения, и продолжает исполнение до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания кода, который переходит от одной метки case к следующей, но в 99 % случаев следует аккуратно завершать каждый блок case инструкцией break. <note>При использовании switch внутри функции можно помещать вместо break инструкцию return. Обе эти инструкции служат для завершения работы инструкции switch и предотвращения перехода к следующей метке case.</note>
 +
 +Ниже приводится более реальный пример использования инструкции switch; он преобразует значение в строку способом, зависящим от типа значения:
 +<file>
 +function convert(x) {
 +switch(typeof x) {
 +case 'number': // Преобразуем число в шестнадцатеричное целое
 +return x.toString(16);
 +case 'string': // Возвращаем строку, заключенную в кавычки
 +return '"' + x + '"';
 +case 'boolean': // Преобразуем в TRUE или FALSE, в верхнем регистре
 +return x.toString().toUpperCase();
 +default:
 +// Любой другой тип преобразуем обычным способом
 +return x.toString()
 +}
 +}
 +</file>
 +<note>Стандарт ECMAScript v3 допускает указание после case произвольного выражения, например case a[0]:, case n+1:.</note>