Funkcja strzałek ECMAScript 6 zwracająca obiekt

Zwracając obiekt z funkcji strzałki, wydaje się, że konieczne jest użycie dodatkowego zestawu słów kluczowych {} i return ze względu na niejednoznaczność gramatyki.

To znaczy, że nie mogę pisać p => {foo: "bar"}, ale muszę pisać p => { return {foo: "bar"}; }.

Jeśli funkcja strzałki zwraca coś innego niż obiekt, {} i return są niepotrzebne, np.: p => "foo".

p => {foo: "bar"} zwraca undefined.

Zmodyfikowany p => {"foo": "bar"} rzuca "SyntaxError: nieoczekiwany token: ':'".

Czy jest coś oczywistego, czego mi brakuje?

Author: Sebastian Simon, 2015-02-27

6 answers

Zwracający obiekt należy zawinąć w nawiasy. W przeciwnym razie będą brane pod uwagę nawiasy klamrowe oznaczające ciało funkcji. Następujące utwory:

p => ({ foo: 'bar' });

Nie musisz owijać innych wyrażeń w nawiasy:

p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;

I tak dalej.

Reference: MDN-zwracanie literałów obiektów

 1159
Author: alexpods,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 15:18:05

Możesz się zastanawiać, dlaczego składnia jest poprawna (ale nie działa zgodnie z oczekiwaniami):

var func = p => { foo: "bar" }

To z powodu składni etykiet JavaScript :

Więc jeśli przepisz powyższy kod do ES5, powinien on wyglądać następująco:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}
 64
Author: Petr Odut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 10:39:21

Jeśli ciało funkcji strzałki jest zawinięte w nawiasy klamrowe, nie jest zwracane domyślnie. Zawiń obiekt w nawiasy. Wyglądałoby to mniej więcej tak.

p => ({ foo: 'bar' })

Owijając ciało w parens, funkcja zwróci { foo: 'bar }.

Mam nadzieję, że to rozwiąże twój problem. Jeśli nie, napisałem niedawno artykuł o funkcjach strzałek, który opisuje go bardziej szczegółowo. Mam nadzieję, że się przyda. Javascript Arrow Functions
 19
Author: Paul McBride,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 09:02:33

Wydanie:

Kiedy robisz:

p => {foo: "bar"}

Interpreter JavaScript myśli, że otwierasz blok kodu z wieloma instrukcjami i w tym bloku musisz wyraźnie wspomnieć o instrukcji return.

Rozwiązanie:

Jeśli twoje wyrażenie funkcji strzałki mA pojedyncze polecenie, możesz użyć następującej składni:

p => ({foo: "bar", attr2: "some value", "attr3": "syntax choices"})

Ale jeśli chcesz mieć wiele poleceń , możesz użyć następujących składnia:

p => {return {foo: "bar", attr2: "some value", "attr3": "syntax choices"}}

w powyższym przykładzie pierwszy zestaw nawiasów klamrowych otwiera wielopozycyjny blok kodu, a drugi zestaw nawiasów klamrowych dotyczy obiektów dynamicznych. W bloku kodu wielostanowiskowego funkcji arrow należy jawnie używać instrukcji return

Aby uzyskać więcej informacji, sprawdź Mozilla Docs dla wyrażeń funkcji js Arrow

 4
Author: Rusty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-02 13:24:46

Funkcja Strzałki ES6 zwraca obiekt

The right ways

  1. funkcja normalna zwraca obiekt

const getUser = user => {return { name: user.name, age: user.age };};

const user = { name: "xgqfrms", age: 21 };

console.log(getUser(user));
//  {name: "xgqfrms", age: 21}

  1. (wyrażenia js)

const getUser = user => ({ name: user.name, age: user.age });

const user = { name: "xgqfrms", age: 21 };

console.log(getUser(user));
//  {name: "xgqfrms", age: 21}

Wyjaśnij

obraz

Refs

Https://github.com/lydiahallie/javascript-questions/issues/220

Https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript

 3
Author: xgqfrms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-28 08:52:53

Zawsze możesz to sprawdzić, aby uzyskać więcej niestandardowych rozwiązań:

x => ({}[x.name] = x);
 -5
Author: SirtusKottus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-25 12:49:15