неоднозначный звонок?функции и объекты JavaScript - PullRequest
0 голосов
/ 30 марта 2011

Я вижу, что в jQuery быть конкретным

var a= 'something' || function () {

}

или

var a = 'something' || { }

Что это значит?Я знаю, что {} - это объект json в javascript, и я знаю об анонимных функциях в javascript, но все еще не могу понять, что это значит.

Заранее спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 30 марта 2011

Вы, скорее всего, включили ошибочный пример.Ваш код допустим , но писать его было бы бесполезно, поскольку вы присваиваете переменную известную строку, что делает следующий оператор OR бесполезным.

Что общий, синтаксис такой:

function foo(bar) {
   // set baz to the contents of bar
   // or create an empty object if bar evaluates to false
    var baz = bar || {}; 
}
1 голос
/ 30 марта 2011

при присвоении значения переменной JavaScript оценивает данное выражение.

var s= s || {};

это означает, что если в текущей области уже есть переменная с именем s, вновь созданная переменная s указываетк этому.Иначе, если переменная s не определена в текущей области, или она указывает на нулевую ссылку, или на какое-то другое значение, оцененное как FALSE, вновь созданная переменная s будет указывать на новый объект.Это полезно при расширении одного объекта в нескольких файлах:

File1

var globalNamespace = globalNamespace  || {};
globalNamespace.someVariable  = "some value;"

File2

var globalNamespace = globalNamespace  || {};
globalNamespace.someFunction = function()
{
    return this.someVariable;
};

Таким образом, можно расширить объект globalNamespace, не беспокоясь о том, что код разбит на несколько файлов.

1 голос
/ 30 марта 2011

Этот вид «условного присваивания» является распространенной идиомой в языках, которая использует короткое замыкание логических операторов (например, в данном случае «ИЛИ») для присвоения переменной значения левого выражения, если оно оценивает к «истинному» значению или правому выражению, если нет. Рассмотрим:

var nullOrFive = null || 5; // => 5

Левая часть (null || five) оценивает проверку каждого операнда слева направо оператором ИЛИ до тех пор, пока не найдет «правдивый», возвращая его. С другой стороны:

var tenOrWhatever = 10 || someMethodThatIsNeverCalled(); // => 10

Таким образом, в ваших примерах, если «что-то» имеет значение true (что-то кроме «undefined», «null» и ноль в JavaScript), тогда переменная «a» получит свое значение, в противном случае она получит функцию (function() {...}) или литерал объекта ({}).

0 голосов
/ 30 марта 2011

цитирование документации на MDC,

Logical OR (||)
expr1 || expr2
Returns expr1 if it can be converted to true; otherwise, returns expr2.
Thus, when used with Boolean values, || returns true if either operand is true;
if both are false, returns false.

Кроме того, существует оценка короткого замыкания: поскольку логические выражения оцениваются слева направо, они проверяются на возможные "короткие"-circuit "вычисление с использованием следующих правил

, поэтому, если expr1 может быть оценено как true, expr2 не оценивается.

jQuery использует множество этих оценок короткого замыкания для определения значений по умолчанию для переменных,например.var o = options ||{};поместит параметры в переменную o;но удостоверится, что o инициализирован как {}, если опции не определены или имеют значение null

...