Dấu ngoặc nhọn bên trong danh sách tham số hàm làm gì trong es6?


120

Tôi tiếp tục thấy các hàm trông giống như thế này trong cơ sở mã mà tôi đang làm việc:

const func = ({ param1, param2 }) => {
  //do stuff
}

Chính xác thì điều này đang làm gì? Tôi đang gặp khó khăn khi tìm nó trên google, vì tôi thậm chí không chắc cái này được gọi là gì hoặc cách mô tả nó trong tìm kiếm trên google.


Câu trả lời:


116

Nó là cấu trúc hủy , nhưng chứa trong các tham số. Tương tự nếu không có cấu trúc hủy sẽ là:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

11
Chỉ để đảm bảo rằng tôi hiểu đúng, về cơ bản, điều này có nghĩa là một đối tượng chứa các thuộc tính đó sẽ được chuyển vào hàm và sau đó trong hàm, các thuộc tính có thể tự động được truy cập chỉ bằng cách sử dụng tên của chúng?
Nathan

7
@Nathan Có, xem cụ thể phần Cấu trúc đối tượng . Tuy nhiên, lưu ý rằng các bản cập nhật cho các biến sẽ không cập nhật các thuộc tính của đối tượng ban đầu - nó không giống như việc tạo một tham chiếu đến giá trị ban đầu.
James Thorpe

@JamesThorpe, tốt hơn là nên liên kết tới developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
lsborg

11

Đây là chuyển một đối tượng như một thuộc tính.

Về cơ bản nó là viết tắt của

let param1 = someObject.param1
let param2 = someObject.param2

Một cách khác để sử dụng kỹ thuật này mà không có tham số như sau, chúng ta hãy xem xét trong giây lát rằng someObject có chứa các thuộc tính đó không.

let {param1, param2} = someObject;

3

Nó là một phép gán cấu trúc đối tượng. Giống như tôi, bạn có thể thấy ngạc nhiên vì cú pháp cấu trúc đối tượng ES6 trông giống như vậy, nhưng KHÔNG hoạt động giống như cấu trúc theo nghĩa đen của đối tượng.

Nó hỗ trợ biểu mẫu ngắn gọn mà bạn đã chạy, cũng như đổi tên các trường và đối số mặc định:

Về cơ bản, đó là {oldkeyname: newkeyname = defaultvalue, ...}. ':' KHÔNG phải là dấu phân cách khóa / giá trị; '=' là.

Một số hậu quả của quyết định thiết kế ngôn ngữ này là bạn có thể phải làm những việc như

; ({a, b} = some_object);

Các parens bổ sung ngăn các dấu ngoặc nhọn bên trái phân tích cú pháp như một khối và dấu chấm phẩy ở đầu ngăn các parens được phân tích cú pháp như một lời gọi hàm đến một hàm trên dòng trước đó.

Để biết thêm thông tin, hãy xem: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destosystem_assignment

Hãy cẩn thận, các lỗi chính trong quá trình gán cấu trúc đối tượng KHÔNG được ném ra; bạn chỉ nhận được các giá trị "không xác định", cho dù đó là lỗi chính hay một số lỗi khác được truyền âm thầm là "không xác định".

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
> 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.