Синтаксис JavaScript

JavaScript — язык и у него есть свой собственный синтаксис, который было бы неплохо отлично знать.
JavaScript программа состоит из предложений, которые разделяются точкой с запятой.

Иногда точку с запятой можно упустить и это сойдет с рук, но не всегда. Поэтому в том случае, когда подразумевается конец предложения, лучше не забыть ее ставить.

Если вы по невнимательности пропускаете точку с запятой, пробелы, ну или по другой причине ваш код не имеет стиль (а это важно!), то советую ESLint.

Предложения состоят из:

  • Значений
  • Операторов
  • Выражений
  • Ключевых слов
  • Комментариев

В JavaScript существует два типа значений: переменные и литералы.

Переменные

Переменные используются для хранения значений. Для объявления переменных в JavaScript используется ключевое слово var.
Переменные мы можем объявить тремя вариантами:

  • С помощью ключевого слова var. Например, var y = 56;
  • Просто присвоив значение. Например, y = 56;
    Но этот вариант нежелателен, так как в таком случае переменная становится глобальной.
    Почему глобальная переменная – это плохо? Хотя бы потому, что становясь глобальной она выходит из-под контроля области действия функции. Она может быть как изменена другим кодом, так и сама переписать значение в чужом коде
  • С помощью ключевого слова let.
    Т.к. в JavaScript (до ECMAScript 6) не существует область видимость в пределах блока, то ввели let, позволяющее объявить переменные с областью видимости – блок.
    Например,

    if (true) {let y = 4;} console.log(y);
    // ReferenceError: y is not defined
    

    Посмотреть текущую поддержку ES6 можно тут.

Литералы

Литералы — фиксированные значения. К ним относятся такие типы данных как null, Boolean, Number, Object, String.
Например, когда мы объявляем массив, то часть, которая идет после знака равно является литералом массива.

var food = [‘cheese’,’potates’,’cucumber’];

А food — это переменная.

Числа

Числа записываются как с десятичными знаками, так и без них.

10.50
1001

Для того, чтобы интерпретатор понял, что означает точка – вызов метода или плавающую точку, нам нужно ему подсказать, одним из способов:

1..toString()
1 .toString() // пробел перед точкой
(1).toString()
1.0.toString()

Строка (String)

String — текст, написанный с помощью двойных или одинарных кавычек.

"I am string“
'And I am string‘ 

По-хорошему, вам надо определить какие кавычки использовать и следовать своему выбору во время написания кода.

В настройках ESLint по-умолчанию даже предоставляют выбор, по результатам которого, код будет проверяться.

Идентификаторы

Название, которое мы дает переменным, функциями, свойствам называется идентификатором.
Он может содержать только буквенно-цифровые символы, «$» и «_».
Чем идентификатор отличается от String?

String – данные, а идентификатор часть кода.

var surname = “Smit”;

“Smit” однозначно данные — литерал строки, тогда как surname – хранилище для этого значения.
Обратите внимание, что дефис в идентификаторе не допускается, так как он используется для вычитания.

Выражения

Выражение — комбинация значений, переменных, операторов, которая вычисляет значение.
Например выражение, 3 * 5 вычисляет 15.
Выражение может содержать и переменную
x * 4
Конечно, значения могут быть и строкой.
Например выражение:

"The day" + " is " + "sunny"
//вычисляется в строку "The day is sunny".

Выражения можно разделить на те, что присваивают значение переменной и на те которые просто вычисляют значения.
Первый случай:

x = 56

а второй:

7 + 5

Кстати, стоит нам добавить точку с запятой и у нас уже не выражение, а предложение!

var x = 56;

Запятая для выражений

Запятая вычисляет оба операнда и возвращает правое значение.

var x = 0;
var y = (x++, 4);
console.log(x);
//1
console.log(y);
//4

Выражения вычисляют значение и могут быть написаны везде, где значение ожидается. Например, аргумент в вызове функции или правая часть присваивания.

Каждая из следующих строк содержит выражение:

x
x + 6
changeArray('a','b')

Везде где js ожидает предложение, вы можете также писать и выражения.
Подобное предложение называется инструкция-выражение.

Но вы не можете писать предложение, где js предполагает выражение. Например IF предложение не может стать аргументом функции.

Сравнение предложения и выражения

Взглянем на IF предложение и на условный оператор, который является выражением.

var result;
if ( x > 0 ) {
    result = 'Положительное число';
} else {
    result = 'Отрицательное число';
}

Эквивалентно:

var result = ( x > 0 ? 'Положительное число' : 'Отрицательное число');

Между знаком = и ; выражение.
Для того, чтобы предотвратить двусмысленность при синтаксическом разборе, JS не позволяет использовать литералы объекта и выражения функций как предложения.

Из этого следует, что предложения-выражения не должны начинаться с:

  • фигурных скобок
  • с ключевого слова function

Если выражение начинается с того либо с другого, то следует его писать в контексте выражения.
Для этого выражение помещается скобки.

Функция-объявление и функция-выражение

Допустим, мы хотим объявить анонимную функцию-выражение, тогда пишем так:

 (function(){return "ready!")()); 

Давайте рассмотрим, чем эта функция будет отличаться от функции-объявления вида

function getReady() {
    return "ready!"
}
  • Очевидно, что у анонимной нет имени. Но оно вполне может быть, тогда это будет именованная функция-выражение.
  • Функция-объявление создается интерпретатором до выполнения кода, функция-выражение же только по время выполнения.
  • Следовательно функции-выражения не доступны до их объявления.

А если мы запишем так ?

getReady();
var getReady = function(){
    return "ready!";
}
getReady();

В первой строчке получим ошибку: TypeError: getReady is not a function
Пятая  же выведет нам «ready», так как функция была уже объявлена.
Это явление называется всплытием (hoisting), почему оно происходит описано в посте про выполнение JavaScript.

 

Хотите быть в курсе новых статей?