Я только начал изучать JavaScript с книги "Eloquent JavaScript", которая доступна бесплатно на eloquentjavascript.net. Пока мне книга очень нравится, только один раздел я не понимаю. Это о выражениях и утверждениях:
http://eloquentjavascript.net/chapter2.html#p65af5913
Я знаю, что эта тема уже упоминалась в StackOverflow раньше, однако это были более конкретные вопросы, и я, честно говоря, не понимаю всего.
В начале абзаца автор объясняет, что такое выражения: Если я правильно понимаю, атомарные значения, такие как 42 или «23», считаются выражениями. Если применить эти значения к оператору (как в 42 - 19), это тоже будет считаться выражением. (Наверное, потому что оно, очевидно, равно 23, что опять-таки является атомарным значением.) Я интерпретирую это следующим образом: Каждое значение — независимо от того, введено оно напрямую или еще не вычислено — называется выражением. Это правильно?
Then the author says the following: "There exists a unit that is bigger than an expression. It is called a statement. [...] Most statements end with a semicolon (;). The simplest kind of statement is an expression with a semicolon after it." As an example he mentions
!false;as an example statement. My questions is "What makes this a statement? Just the semicolon at the end?" When I use the JavaScript console, it makes absolutely no difference whether I type that in with or without the semicolon. It always returns true. However, the author says that "[A] statement only amounts to something if it somehow changes the world." So the given example is not even a statement since it "just produce[s] the value [...] true, and then immediately throw[s it] into the bit bucket"? I am really confused now... If I did not entirely mess it up in my head, a statement has to have some "side-effect" (like a declaration of a variable), right?
Однако я был бы очень рад, если бы кто-нибудь объяснил, что такое оператор. Также было бы очень полезно, если бы кто-нибудь мог привести пример, в котором различие этих терминов действительно полезно, потому что прямо сейчас я даже не могу себе представить, почему автор вообще утруждает себя введением этих словарей. Заранее большое спасибо!
false;
), остается оператором. - person Pointy   schedule 16.01.2013if
операторы, циклыfor
,foreach
,while
, являются операторами. Функция declaration также является оператором. Объявление переменной сvar
является оператором. - person Felix Kling   schedule 16.01.2013