TL; DR;
Array.prototype.slice.call(nodelist).filter
Phương thức slice () trả về một mảng. Mảng được trả về đó là một bản sao cạn của bộ sưu tập (NodeList)
Vì vậy, nó hoạt động nhanh hơn Array.from ()
Vì vậy, nó hoạt động nhanh như Array.from ()
Các phần tử của tập hợp ban đầu được sao chép vào mảng trả về như sau:
- Đối với tham chiếu đối tượng (và không phải đối tượng thực), lát sao chép các tham chiếu đối tượng vào mảng mới. Cả mảng ban đầu và mảng mới đều tham chiếu đến cùng một đối tượng. Nếu một đối tượng được tham chiếu thay đổi, các thay đổi sẽ hiển thị cho cả mảng mới và mảng ban đầu.
- Đối với chuỗi, số và boolean (không phải đối tượng String, Number và Boolean), lát cắt sao chép các giá trị vào mảng mới. Các thay đổi đối với chuỗi, số hoặc boolean trong một mảng không ảnh hưởng đến mảng khác.
Giải thích ngắn gọn về các lập luận
Array.prototype.slice (beginIndex, endIndex)
- lấy args tùy chọn beginIndex và endIndex. Nếu chúng không được cung cấp, các lát cắt sử dụng beginIndex == 0, do đó nó trích xuất tất cả các mục từ bộ sưu tập
Array.prototype.slice.call (không gian tên, beginIndex, endIndex)
- lấy một đối tượng làm đối số đầu tiên. Nếu chúng ta sử dụng một bộ sưu tập như một đối tượng, nghĩa đen là chúng ta gọi phương thức lát cắt trực tiếp từ không gian tên đối tượng đó.slice ()
babel
, sau đó[...coll]
sẽ chỉ đơn giản gọiArray.from(coll)
cho bất kỳ thứ gì không phải làArray
.