[...nodelist]
stworzy tablicę z obiektu, jeśli obiekt jest iterowalny.
Array.from(nodelist)
będzie tablicę z obiektem, jeżeli obiekt jest iterowalny lub jeśli obiekt jest tablica-podobne (nie .length
i podpory numerycznych)
Dwustopniowa przykłady będą identyczne, jeśli NodeList.prototype[Symbol.iterator]
istnieje ponieważ oba przypadki obejmują iterables. Jeśli twoje środowisko nie zostało skonfigurowane tak, że NodeList
jest iterowalne, Twój pierwszy przykład się nie powiedzie, a drugi się powiedzie. Babel
obecnie does not handle this case properly.
Jeśli więc Twój NodeList
jest iterowalny, to naprawdę zależy od Ciebie. Najprawdopodobniej wybrałbym dla każdego przypadku z osobna. Jedną z korzyści z Array.from
jest to, że zajmuje on drugi argument funkcji odwzorowania, podczas gdy pierwszy [...iterable].map(item => item)
musiałby utworzyć tymczasową tablicę, której nie zrobiłby Array.from(iterable, item => item)
. Jeśli jednak nie mapujesz listy, nie ma to znaczenia.
Zasadniczo, obie metody robią to samo. Używasz 'babel', a następnie' [... coll] 'po prostu wywoła' Array.from (coll) 'dla wszystkiego, co nie jest' Array'. –
FWIW, składnia '...' może nie być obsługiwana przez starsze IDE, podczas gdy 'Array.from()' jest zwykłą metodą. –