2011-02-28 4 views
3

Можно создать дубликат:
What does “options = options || {}” mean in Javascript?Что означает этот Javascript-код?

Глядя на источник YouTube ...

var yt = yt || {}; 

Означает ли это .. набор yt для yt если yt существует, иначе создать новый объект?

Если это так, я не думал, что вы можете поставить условие при объявлении переменной.

+0

См. [Что делает "options = options || {}" означает в Javascript?] (Http://stackoverflow.com/questions/2851404/what-does-options-options-mean-in-javascript) –

ответ

4

Назначить значение yt назад yt, за исключением случаев, когда это не относится к 0, NaN, false, null, "", или undefined (т. это falsy), и в этом случае назначьте {} на yt.

Это работает, потому что каждое из значений в приведенном выше списке оценивается в false в булевом выражении.

+0

Вы забыли пустую строку: 'Boolean ('') === false' – PleaseStand

+0

@ideal - Упс! Исправлена. –

1

Оцените yt, если он оценивает значение false, а затем создайте его как объект.

В первый раз я увидел Somthing, как это было:

function handleEvent(e){ 
    e=e||window.event; 
} 

довольно изящная ~ Кто-нибудь знает других языков, которые поддерживают этот синтаксис? (Не PHP = (

+0

Почему было бы 'yt' ложным? Это не похоже на булевский var. Или вы имеете в виду false, поскольку в объекте еще не существует? – Marko

+0

Ruby has: yt || = {} –

+0

Почему это было приостановлено? – Marko

3

Это означает, что: Если содержимое не оценивается как ложное, назначьте его себе (что является нейтральной операцией), в противном случае создайте новый объект и назначьте его yt.Это обычно используется для создавать объекты для использования в качестве пространств имен, первая проверка, если пространство имен уже существует.

+0

Не совсем. Рассмотрим: «var yt = NaN; yt = yt || {}; 'В этом случае' yt' * exists *, но конечным результатом будет '{}'. –

+0

@ lwburk: да, но это не объект. –

+2

Это не имеет никакого отношения к этому. Пустая строка - это объект и даст тот же результат. –

0

Да, вся правая часть выражения сначала вычисляется перед заданием. Таким образом, если yt==false значение выражения на РИТ будет {} и перейдите на адрес var yt

+1

Нет, это не значит, что это ложь, это ли это фальшь. –