Первый метод подходит, когда вам нужен действительный объект в obj
для остальной части вашего кода, и вы хотите убедиться, что есть действительный объект только в одном месте в коде.
Второй способ подходит, если вы просто хотите проверить, прошел ли obj
или нет, и что-то другое в вашем коде в зависимости от этого условия. Более надежная проверка будет:
if (typeof obj === "object")
Таким образом, эти различные методы, которые выполняют различные цели и в основном используются в различных обстоятельствах.
Итак, ответ заключается в том, что «это зависит от того, что делает остальная часть вашего кода, и от того, что вы действительно пытаетесь выполнить в своем коде». Нет никакого ответа, который всегда правильный.
Общий шаблон дизайна для вашего первого метода используется, когда у вас есть дополнительный объект с дополнительными свойствами, и вы хотите, чтобы заполнить значения по умолчанию для отсутствующих свойств или даже если весь объект не был принят:
function doSomething(obj) {
var defaults = {timeout: 2000, caseSensitive: false, waitTime: 400};
var options = Object.assign({}, defaults, obj);
// safely use options object in the rest of this function
}
Этот метод также безопасно работает с копией переданного объекта, поэтому объект вызывающего абонента никогда не изменяется.
Ничего? Что делать, если 'obj === 1'? – theonlygusti
Зависит от того, что вы хотите «obj» удерживать после утверждения. – Bergi
Не выполнять [преждевременно оптимизировать] (https://en.wikipedia.org/wiki/Premature_optimisation). Любая разница, если вообще будет, будет незначительной. Используйте стандартные идиомы и сосредоточьтесь на удобочитаемости. – Bergi