Условные выражения определения объекта JavaScript - который лучше?

Я столкнулся с двумя различными способами определить/назвать объекты и функции в JavaScript, которые сначала проверяют на существование имени перед использованием его. Проблема, я не знаю, какой лучше (с точек зрения скорости и удобства использования), и невозможно использовать булевы операторы в поиске Google для понимания этого.

Первый я чаще всего вижу:

var myNewObject = myNewObject ? myNewObject : function () {
    // Code goes here.
};

Второй кажется более кратким, но я только видел его одно или два места, таким образом, я не знаю, существует ли стандарт или даже название его:

var myNewObject = myNewObject || function() {
    // Code goes here.
};

Функционально, они оба делают то же самое, и они оба, кажется, работают в каждом браузере, в котором я могу протестировать. Мой вопрос - это - который лучше и почему? Кроме того, в то время как первым определением является по существу однострочное условное выражение..., чем называют второй?

7
задан kiamlaluno 9 July 2010 в 17:47
поделиться

5 ответов

Я бы выбрал последнее хотя бы потому, что вы набираете myNewObject дважды, а не трижды.

Кроме того, хотя первое определение по сути является однострочным условным условием ... как называется второе?

Оценка короткого замыкания

5
ответ дан 6 December 2019 в 19:32
поделиться

Я бы использовал второй пример, который описывается как (Минимальный Eval). Это проще и кажется более читаемым.

Это похоже на получение события из метода onClick в нескольких браузерах.

element.onclick = function (evt) {
  evt = evt || window.event
}
5
ответ дан 6 December 2019 в 19:32
поделиться

Последнее, это похоже на оператор null coalesce в c# ???, когда используется таким образом

см: Есть ли в JavaScript оператор "null coalescing"?

2
ответ дан 6 December 2019 в 19:32
поделиться

FWIW Я чаще вижу второй подход и (со своей стороны) считаю его более ясным, кратким и идиоматичным.

1
ответ дан 6 December 2019 в 19:32
поделиться

Оба метода работают. Но я думаю, что наиболее оптимизированная версия - это просто использовать обычный тест if, например:

if(!myNewObject)
   myNewObject = ...

Выполнение любого из методов, которые вы предлагаете в своем ответе, может потребовать ненужного переназначения каждый раз, когда функция / объект уже определены. Я имею в виду, что если myNewObject уже определен, среда выполнения JavaScript должна будет выполнить ненужное переназначение myNewObject = myNewObject (если только среда выполнения не оптимизирует его).

На веб-сайте Mozilla предлагается использовать простое if, просмотрите это .

0
ответ дан 6 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: