Задание 1

Дан код:
var a = 1, b = 1, c, d;
c = ++a; alert(c); // 2
d = b++; alert(d); // 1
c = (2+ ++a); alert(c); // 5
d = (2+ b++); alert(d); // 4
alert(a); // 3
alert(b); // 3

Почему код даёт именно такие результаты?

Ответ:
Все зависит от последовательности действий с инкрементом, которые отличаются для префиксного (имеет наивысший приоритет) и постфиксного (наименьший приоритет).
По строкам:
- сначала увеличивается a, потом идет присвоение в c
- сначала идет присвоение в d, потом увеличение b
- сначала увеличивается a, потом идет сложение и потом присваивание
- сначала идет сложение, потом увеличивается b, потом присваивается результат сложения (2+ 2) в d
- в итоге и a и b увеличивались 2 раза каждый и результат одинаков 3 и 3


Задание 2

Чему будет равен x в примере ниже?

var a = 2;
var x = 1 + (a *= 2);

Ответ:
x = 5
Сначала идет умножение (2 * 2), получается 4, присваивается в переменную a, затем результат умножения добавляется к 1 и получается 5, что и присваивается в x.


Задание 7

* Сравнить null и 0. Попробуйте объяснить результат.

Ответ:
С null можно сравнивать только на равенство и неравенство. Остальные сравнения бесполезны.
В данном случае 0 - это значение, а null, как и всегда - это ничто. Приведение типов тут не работает.