Я столкнулся с двумя различными способами определить/назвать объекты и функции в JavaScript, которые сначала проверяют на существование имени перед использованием его. Проблема, я не знаю, какой лучше (с точек зрения скорости и удобства использования), и невозможно использовать булевы операторы в поиске Google для понимания этого.
Первый я чаще всего вижу:
var myNewObject = myNewObject ? myNewObject : function () {
// Code goes here.
};
Второй кажется более кратким, но я только видел его одно или два места, таким образом, я не знаю, существует ли стандарт или даже название его:
var myNewObject = myNewObject || function() {
// Code goes here.
};
Функционально, они оба делают то же самое, и они оба, кажется, работают в каждом браузере, в котором я могу протестировать. Мой вопрос - это - который лучше и почему? Кроме того, в то время как первым определением является по существу однострочное условное выражение..., чем называют второй?
Я бы выбрал последнее хотя бы потому, что вы набираете myNewObject
дважды, а не трижды.
Кроме того, хотя первое определение по сути является однострочным условным условием ... как называется второе?
Я бы использовал второй пример, который описывается как (Минимальный Eval). Это проще и кажется более читаемым.
Это похоже на получение события из метода onClick в нескольких браузерах.
element.onclick = function (evt) {
evt = evt || window.event
}
Последнее, это похоже на оператор null coalesce в c# ???
, когда используется таким образом
FWIW Я чаще вижу второй подход и (со своей стороны) считаю его более ясным, кратким и идиоматичным.
Оба метода работают. Но я думаю, что наиболее оптимизированная версия - это просто использовать обычный тест if, например:
if(!myNewObject)
myNewObject = ...
Выполнение любого из методов, которые вы предлагаете в своем ответе, может потребовать ненужного переназначения каждый раз, когда функция / объект уже определены. Я имею в виду, что если myNewObject уже определен, среда выполнения JavaScript должна будет выполнить ненужное переназначение myNewObject = myNewObject
(если только среда выполнения не оптимизирует его).
На веб-сайте Mozilla предлагается использовать простое if, просмотрите это .