2015-07-11 19 views
13

Czy są jakieś istotne różnice (semantyczne, związane z wydajnością itp.) Pomiędzy (1) i (2)?(obj || {}) kontra Object (obj)

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

kontekście. Po pierwsze dzielę zmienne między szablony Django i moje pliki js. Właśnie natknąłem się na odcinku w Rauschmayer 2014 ("Funkcje do konwersji Boolean, Number, łańcuch, i przedmiot", str. 79), w której opisał Object(obj) następująco:

  • obj jeśli obj jest obiektem,
  • {} jeśli obj jest undefined lub null,
  • [owinięty prymitywny] Jeżeli obj wartości podstawowej.

Biorąc pod uwagę, że (bardzo nieformalne) semantyka (szczególnie pierwsze dwie klauzule), wydaje mi się, że możemy użyć (2) gdzie będziemy używać (1), ale nie jestem do końca pewien, co to konsekwencje będzie miał.

Rauschmayer, Axel (2014) Speaking JavaScript (za darmo do przeczytania online).

+2

'1' jest pospolitym idiomem,' 2' nie jest. Aby uczynić twój kod zrozumiałym dla większości programistów, trzymaj się zwykłej składni. – Barmar

Odpowiedz

13

Tak, jest różnica, ponieważ cytowany cytat już wspomina. Pierwsza notacja zwróci prymityw, gdy obj jest prymitywny. Drugi zwróci owinięty prymitywem, który jest obiektem.

Jeśli reszta kodu opiera się na obiekcie obj, druga notacja jest bardziej defensywna.

Jednak pierwsza notacja jest bardziej powszechna i można się zastanawiać, w jaki sposób prymitywna wartość zostanie przypisana do zmiennej o nazwie obj.

+1

Dziękuję za twoją przemyślaną odpowiedź. Bardzo pomocne. – Readingtao

Powiązane problemy