Подтвердить что ты не робот

(obj || {}) vs Object (obj)

Существуют ли какие-либо важные отличия (семантические, связанные с производительностью и т.д.) между (1) и (2)?

  • var obj = obj || {};
  • var obj = Object(obj);

Context. Во-первых, это способ обмена переменными в шаблонах Django и моих js файлах. Я только что наткнулся на раздел в Rauschmayer 2014 ( "Функции для преобразования булевых чисел, чисел, строк и объектов", стр. 79), где он описал Object(obj) следующим образом:

  • obj, если obj - объект,
  • {}, если obj - undefined или null,
  • [wrapped primitive], если obj является примитивным значением.

Учитывая, что (очень неформальная) семантика (особенно первые два предложения), мне кажется, что мы можем использовать (2) везде, где мы будем использовать (1), но я не совсем уверен, какие последствия это будет иметь.

Rauschmayer, Axel (2014) Говорящий JavaScript (бесплатно читать онлайн).

4b9b3361

Ответ 1

Да, есть разница, поскольку цитата, которую вы дали, уже упоминает. Первая запись вернет сам примитив, когда obj был примитивным. Второй возвращает возвращенный примитив, являющийся объектом.

Если остальная часть кода полагается на obj как объект, вторая нотация более защитная.

Но опять же, первое обозначение является более распространенным, и можно задаться вопросом, как примитивное значение будет присвоено переменной с именем obj в любом случае.