Что делает в JS processMethod = processMethod || функция () {}; делать?

Я читаю некоторый код javascript, и я видел много кода, который выглядит так:

processMethod = processMethod || function(){};

обычно он находится внутри функции. Я считаю, что это сокращенный код, но я не уверен, что он делает.

Проверяет ли он, имеет ли processMethod значение, и, если нет, объявляет его как функцию, которую можно определить позже?


person Community    schedule 31.01.2014    source источник
comment
означает, что если processMethod не существует, просто создайте пустую функцию, чтобы предотвратить processMethod -- undefined error.   -  person Praveen    schedule 31.01.2014
comment
Прости #Раймонд Чен. Я понятия не имел, как задать вопрос или даже какие термины искать, прежде чем опубликовать его.   -  person    schedule 31.01.2014
comment
Да, важной частью была пунктуация, которую SO не знает, как искать.   -  person Raymond Chen    schedule 31.01.2014
comment
@RaymondChen, @gdaniel: [javascript] what does "||" do   -  person Felix Kling    schedule 31.01.2014


Ответы (2)


В словах:

if there is no processMethod, create it empty.

|| работает с логическими значениями, поэтому он проверяет, имеет ли первый операнд processMethod логический эквивалент. Если processMethod определен и не равен null, логический эквивалент равен true. Если processMethod не определен или имеет значение null, логический эквивалент равен false. В ложном случае || ищет логический эквивалент второго операнда, он не нулевой, поэтому его логический эквивалент равен true.

false || true преобразуется в true, поэтому processMethod становится function(){}.

Кстати function(){} — это пустая функция, которая раньше не выдавала ошибку на processMethod()

person Grim    schedule 31.01.2014
comment
Спасибо, это имеет смысл. Все еще изучаю сокращенные коды. - person ; 31.01.2014

По сути, проверяет, существует ли он или нет. Если он не существует, назначьте его.

function doSomething(o) {
    o = o || {};
}

В приведенном выше случае он проверяет, было ли передано значение для o. Если нет, он присваивает ему пустой объект.

person Evan Trimboli    schedule 31.01.2014
comment
В этом случае doSomething(0) может, к сожалению, измениться на {}. - person Grim; 31.01.2014
comment
Технически, но есть вероятность, что если вы ожидаете объект, вы не получите 0. - person Evan Trimboli; 31.01.2014
comment
Правильно, это также соответствует конкретному вопросу ОП. - person Grim; 31.01.2014