2015-07-11 2 views
13

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

  1. var obj = obj || {};
  2. var obj = Object(obj);

контекст. Первый способ обмена переменными по шаблонам Django и моим js-файлам. Я просто наткнулся на раздел в Rauschmayer 2014 ("Функции для преобразования Boolean, Number, String, и объект", стр 79.), Где он описал Object(obj) следующим образом:

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

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

Rauschmayer, Axel (2014) Speaking JavaScript (бесплатно читать онлайн).

+2

'1' - распространенная идиома,' 2' - нет. Чтобы ваш код был понятен большинству программистов, придерживайтесь обычного синтаксиса. – Barmar

ответ

13

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

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

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

+1

Спасибо за ваш продуманный ответ. Очень полезно. – Readingtao

Смежные вопросы