Tôi vừa tìm thấy {....0}trong mã của bạn bè. Đánh giá nó trong bảng điều khiển trả về {}(đối tượng trống).
Tại sao vậy? Ý nghĩa của 4 dấu chấm trong JavaScript là gì?
Tôi vừa tìm thấy {....0}trong mã của bạn bè. Đánh giá nó trong bảng điều khiển trả về {}(đối tượng trống).
Tại sao vậy? Ý nghĩa của 4 dấu chấm trong JavaScript là gì?
Câu trả lời:
Bốn dấu chấm thực ra không có ý nghĩa gì. ...là toán tử spread , và .0là viết tắt của 0.0.
Do đó, rải 0 (hoặc bất kỳ số nào) vào một đối tượng sẽ tạo ra một đối tượng rỗng {}.
Spreading 0 (or any number) yields an empty objectkhông nhất thiết nếu bạn rải một số ở bất kỳ vị trí nào khác ngoài một đối tượng, nó sẽ tạo ra một lỗi, ví dụ [... 0] ném một lỗi.
Spreading 0 (or any number) in object literal yields an empty objectChứa nhiều thông tin hữu ích hơn ..
Ba dấu chấm trong một đối tượng theo nghĩa đen là một thuộc tính spread , ví dụ:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
Dấu chấm cuối cùng với số 0 là một chữ số .0giống như 0.0. Do đó điều này:
{ ...(0.0) }
trải tất cả các thuộc tính của đối tượng number vào đối tượng, tuy nhiên vì các số không có bất kỳ thuộc tính nào (riêng) nên bạn sẽ lấy lại một đối tượng trống.
Function (function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}nhưng không làm việc choNumber (x = 10), (x.k = 'v'), ({...x}) // {}
x.ksẽ bị lạc.
Nói một cách đơn giản, {...}toán tử spread trong javascript mở rộng một đối tượng / mảng với một đối tượng / mảng khác.
Vì vậy, khi babelifier cố gắng mở rộng cái này với cái khác, nó phải xác định xem nó đang cố gắng mở rộng một mảng hay một đối tượng.
Trong trường hợp của array, nó lặp qua các phần tử.
Trong trường hợp của object, nó lặp qua các phím.
Trong trường hợp này, trình tổng hợp đang cố gắng trích xuất các khóa numberbằng cách kiểm tra Đối tượng own property callbị thiếu để numbertrả về Đối tượng trống.
Toán tử Spread {...}cho phép mở rộng các vòng lặp. Nó có nghĩa là những kiểu dữ liệu có thể được định nghĩa dưới dạng key-valuecặp có thể được mở rộng. Về mặt Objectchúng ta gọi cặp khóa-giá trị là thuộc tính Đối tượng và nó là giá trị trong khi về mặt arrayschúng ta có thể nghĩ chỉ mục là khóa và phần tử trong mảng là giá trị của nó.
let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}
let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}
Về mảng, vì nó lấy chỉ mục làm khóa nên ở đây nó thay thế phần tử '1' của arr1bằng '3' vì cả hai đều có cùng chỉ mục trong mảng khác nhau.
Với quá nhiều chuỗi, toán tử spread trả về đối tượng không rỗng. Vì chuỗi là một mảng ký tự nên nó coi chuỗi như một mảng.
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
Nhưng với các kiểu dữ liệu nguyên thủy khác, nó trả về đối tượng rỗng
với số
let obj6 = { ...0.0, ...55} // {}
với Boolean
let obj7 = { ...true, ...false} // {}
Tóm lại, những kiểu dữ liệu có thể được xử lý dưới dạng các cặp khóa-giá trị khi được sử dụng với toán tử spread {...}sẽ trả về đối tượng không trống, nếu không nó trả về đối tượng trống{}