[ID CS4-CS6] значение по умолчанию при вызове функции

  • Автор темы Автор темы bossrus
  • Дата начала Дата начала
@bossrus, все просто:

JavaScript:
function someFunction(a, b, c) {
    // a is boolean, default is false
    var a = !!a;
    // other cases
    var b = b || 'значение по умолчанию';
    var c = c || 12;
    $.writeln('A: ' + a);
    $.writeln('B: ' + b);
    $.writeln('C: ' + c);
    $.writeln();
}

someFunction(undefined, 'test', 14);
someFunction(1, undefined, 17);
someFunction(true, 'значение');
Вывод:

Код:
A: false
B: test
C: 14

A: true
B: значение по умолчанию
C: 17

A: true
B: значение
C: 12
 
Последнее редактирование:
@bossrus, когда в следующий раз будешь обращаться к документации по Javascript, учитывай, что ExtendScript:
а) это диалект ECMAScript (подверсией которого является JS), следовательно, имеет собственные объекты, собственные реализации отдельных объектов, не имеет отдельных объектов из той версии ECMAScript, от которой он реализован.
б) это диалект ECMAScript 3, 1999 года рождения. Большинство современных учебников по JS описывают ECMAScript 6. Версии ECMAScripts: JavaScript Versions
 
Последнее редактирование:
Чета, все совсем не то 'hmmm'
JavaScript:
someFunction(1, false, 17);
someFunction(true, 'значение',false);
 
Или даже так
JavaScript:
someFunction(1, 0, 17);
someFunction(true, 'значение',0);
121036
 
Чета, все совсем не то 'hmmm'
Естественно, если ты включишь голову, а не очки.
b и c ожидают небулево значение, а ты им суешь булево "нет", в результате, при булевом выборе выбирается правое значение.
Так что всё то.

P. S. Как же бесит это харамное "че", когда есть красивое и халяльное "чо".
 
Молодец, быстро нагуглил методичку! А теперь обьясни сакральный смысл конструкции, переводящей параметры всех типов, булевский эквивалент которых ложен в дефолт???
 
Молодец, быстро нагуглил методичку! А теперь обьясни сакральный смысл конструкции, переводящей параметры всех типов, булевский эквивалент которых ложен в дефолт???
Сам-то понял, что сказал?
Если тебе нужно пояснить, что делается в таком выражении
JavaScript:
var b = b || 'значение по умолчанию';
то, смотри, мы пытаемся явно присвоить локальной переменной b значение параметра функции b (если такого не сделать, то присвоение будет неявным), однако в случае, если значение параметра не определено (undefined) происходит то, что в Java называется Excepion (исключение), в логике Javascript это возвращение булева значения false, мол, присвоение у нас не случилось. Получив false вместо значения иного типа, мы уже сможем его обработать и отдать его в логическую конструкцию ИЛИ (||).
Таким образом, var b = b || 'значение по умолчанию'; следует читать так: присвоить локальной переменной b значение параметра функции b, а если присвоение невозможно, присвоить локальной переменной b строковое значение "значение по умолчанию".
 
Дичь какая то. Какой кашрут мешает присвоить локальной переменной b значение параметра равное 0 или false? Почему в данном случае ему присваивается левое дефолтное значение?
 
  • Спасибо
Реакции: Skvoznyak
сначала выполняется сравнение

b || 'значение по умолчанию'

а уже затем его результат присваивается. приоритет операций такой. легко проверить, добавив скобки

var b = (b || 'значение по умолчанию');

ничего не изменится


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

var b = (b = b) || 'значение по умолчанию';

но опять-таки, при b == 0 получим в результате присвоение ненужного значения по умолчанию


поэтому правильно будет так

var b = b != undefined ? b : 'значение по умолчанию';

но в принципе, это изначально и предлагалось
 
Последнее редактирование:
в случае, если значение параметра не определено (undefined) происходит то, что в Java называется Excepion (исключение), в логике Javascript это возвращение булева значения false, мол, присвоение у нас не случилось.

это кстати тоже неверно

var b = (c = undefined);
b;

=> undefined

так как оператор '=' возвращает присвоенное значение