[...nodelist]
sẽ tạo một mảng ngoài đối tượng nếu đối tượng có thể lặp lại được.
Array.from(nodelist)
sẽ làm cho một mảng ra của một đối tượng nếu đối tượng là iterable hoặc nếu đối tượng là mảng tương tự (có .length
và đạo cụ số)
hai ví dụ của bạn sẽ giống hệt nhau nếu NodeList.prototype[Symbol.iterator]
tồn tại, vì cả hai trường hợp đều có thể lặp lại. Nếu môi trường của bạn chưa được định cấu hình sao cho NodeList
có thể lặp lại, ví dụ đầu tiên của bạn sẽ thất bại và ví dụ thứ hai sẽ thành công. Babel
hiện tại does not handle this case properly.
Vì vậy, nếu NodeList
của bạn có thể lặp lại, điều đó thực sự tùy thuộc vào bạn mà bạn sử dụng. Tôi có khả năng sẽ chọn trên cơ sở từng trường hợp cụ thể. Một lợi ích của Array.from
là phải mất một đối số thứ hai của một hàm ánh xạ, trong khi [...iterable].map(item => item)
đầu tiên sẽ phải tạo một mảng tạm thời, Array.from(iterable, item => item)
thì không. Tuy nhiên, nếu bạn không lập bản đồ danh sách, nó không quan trọng.
Về cơ bản, cả hai phương pháp đều thực hiện tương tự. Bạn đang sử dụng 'babel', sau đó' [... coll] 'sẽ gọi đơn giản là 'Array.from (coll)' cho bất cứ thứ gì không phải là một 'mảng'. Cú pháp –
FWIW, '...' có thể không được hỗ trợ bởi các IDE cũ hơn trong khi 'Array.from()' chỉ là một phương thức thông thường. –