03. Логические значения

Контрольные вопросы

  1. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var y = 100;
    var x = y || 0;
    
    Ответ

    Ответ: 100. Логическое значение первого операнда (100) есть true, значит, это значение становится результатом выполнения операции.

  2. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var y = "";
    var x = y+1 && (y+275).substring(1)
    
    Ответ

    Ответ: строка "75". Поскольку логическое значение первого операнда есть true, результатом выполнения операции становится значение второго операнда.

  3. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var x = 1;
    if (function (t) {return --t;}) x++;
    
    Ответ

    Ответ: число 2. Объекты (в том числе функции и массивы), значения которых отличны от null, в контексте логического значения преобразуются в true.

  4. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var x = 1;
    if (function (t) {return --t;}(x)) x++;
    
    Ответ

    Ответ: число 1.

    1. Вычисляется функциональный литерал от x, который равен 1. Значит, вычисляем функцию от аргумента t, который равен 1. "--t" — уменьшает на 1 значение t, получаем 0, и 0 возвращается в качестве результата вычисления функции.
    2. Получаем: if (0) x++; Число 0 в контексте логического выражения дает false, инструкция x++; не выполняется и x сохраняет прежнее значение 1.
  5. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var x = 1;
    if (function (t) {return t--;}(x)) x++;
    
    Ответ

    Ответ: число 2.

    Всё тоже, что и в предыдущем задании (функция вычисляется), но уменьшение t-- срабатывает уже после возврата значения t (то есть единицы), поэтому условие истинно, x увеличивается на 1.

  6. Испытательный стенд Какое значение получит переменная x. Ответ объясните.

    
    var t = function (x, y, z)
            {
               y = y || "";
               z = z || "";
               return  x.concat(y,z); 
            } 
    
    1. var x = t("1",2,3,4);                                         
    2. var x = t("1",2,3);                                           
    3. var x = t("1",2);                                             
    4. var x = t("1");                                               
    5. var x = (t("1",true)).substring(1);                           
    6. var x = (t("1",(t("м","от")).substring(1))).replace(/\d/,"к");
    Ответ
    1. Ответ: строка "123". Последний фактический аргумент игнорируется.
    2. Ответ: строка "123".
    3. Ответ: строка "12".
    4. Ответ: строка "1".
    5. Ответ: строка "true".
    6. Ответ: строка "кот".