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à .0
là 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 object
khô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 object
Chứ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ố .0
giố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.k
sẽ 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 number
bằng cách kiểm tra Đối tượng own property call
bị thiếu để number
trả 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-value
cặp có thể được mở rộng. Về mặt Object
chú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 arrays
chú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 arr1
bằ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{}