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?
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
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!
}
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 }
.
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
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
- 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}
- (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
Refs
Https://github.com/lydiahallie/javascript-questions/issues/220
Https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript
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);
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