JavaScript. Подробное руководство, 6-е издание, стр. 42
// Скопировать свойства объекта о в объект р и вернуть р
<b>function сору(о, р) {</b><b> р = р || {}; // Если объект р не был передан, создать новый объект.</b><b> // реализация тела функции</b><b>}</b>4.10.3. Логическое НЕ (!)
Оператор
<b>!</b><b>!х</b><b>false</b><b>!х</b><b>false</b>В отличие от операторов
<b>&&</b><b>||</b><b>!</b><b>true</b><b>false</b><b>!!х</b>Будучи унарным, оператор ! имеет высокий приоритет и тесно связан с операндом. Если вам потребуется инвертировать значение выражения, такого как
<b>р && q</b><b>! (р && q).</b>// Следующие две проверки на идентичность дают положительный результат
// при любых значениях р и q
!(р && q) === !р || !q !(р || q) === !р && !q
4.11. Выражения присваивания
Для присваивания значения переменной или свойству в языке JavaScript используется оператор
<b>=</b><b>і = 0 // Присвоит переменной і значение 0.</b><b>о.х = 1 // Присвоит свойству х объекта о значение 1.</b>Левым операндом оператора = должно быть левостороннее выражение: переменная, элемент массива или свойство объекта. Правым операндом может быть любое значение любого типа. Значением оператора присваивания является значение правого операнда. Побочный эффект оператора = заключается в присваивании значения правого операнда переменной или свойству, указанному слева, так что при последующих обращениях к переменной или свойству будет получено это значение.
Чаще всего выражения присваивания используются как самостоятельные инструкции; тем не менее иногда можно увидеть, как выражение присваивания включается в более сложные выражения. Например, в одном выражении можно совместить операции присваивания и проверки значения:
<b>(а = b) == 0</b>обычно бывает необходимо использовать круглые скобки, если выражение присваивания используется в составе более сложного выражения.
Оператор присваивания имеет ассоциативность справа налево, поэтому при наличии в выражении нескольких операторов присваивания они вычисляются справа налево. Благодаря этому можно написать код, присваивающий одно значение нескольким переменным, например:
<b>i = j = к = 0; // Инициализировать 3 переменные значением 0</b>4.11.1. Присваивание с операцией
Помимо обычного оператора присваивания = в языке JavaScript поддерживается несколько других операторов, объединяющих присваивание с некоторой другой операцией. Например, оператор += выполняет сложение и присваивание. Следующее выражение:
<b>total += sales_tax</b>эквивалентно выражению:
<b>total = total + sales_tax</b>Как можно было ожидать, оператор += работает и с числами, и со строками. Для числовых операндов он выполняет сложение и присваивание, а для строковых -конкатенацию и присваивание.
Из подобных ему операторов можно назвать -=, *=, &= и др. Все операторы присваивания с операцией перечислены в табл. 4.2.

В большинстве случаев выражение:
<b>а ор= b</b>где ор означает оператор, эквивалентно выражению:
<b>а = a op b</b>В первой строке выражение а вычисляется только один раз. Во второй - дважды. Эти выражения отличаются, только если подвыражение а содержит операции, имеющие побочные эффекты, такие как вызов функции или оператор инкремента. Например, следующие два выражения присваивания неэквивалентны:
<b>data[i++] *= 2; </b><b>data[i++] = data[i++] * 2;</b>4.12. Вычисление выражений
Подобно многим интерпретирующим языкам, JavaScript поддерживает возможность интерпретации строк с программным кодом на языке JavaScript, выполняя их, чтобы получить некоторое значение. В JavaScript эта операция выполняется с помощью глобальной функции eval():
<b>eval("3+2") // => 5</b>Динамическое выполнение строк с программным кодом является мощной особенностью языка, которая практически никогда не требуется на практике. Если у вас появится желание использовать функцию
<b>eval(),</b>В подразделах ниже описываются основы использования функции
<b>eval()</b><b>eval()</b><b>eval()</b><b>eval()</b><b>eval()</b><b>eval()</b>