2012-05-10 45 views
11

Khi xem mã Javascript cho SDK bổ sung của Mozilla (Firefox), tôi thấy loại khai báo biến mà tôi chưa từng thấy trước đây:Javascript - Chỉ định nhiều biến cho thuộc tính đối tượng sử dụng dấu ngoặc nhọn trong khai báo biến

var { foo, bar } = someFunction("whatever"); // just an example 

Xem các dấu ngoặc nhọn đó xung quanh tên biến? Hóa ra, đây là một cách để gán các giá trị của các thuộc tính của một đối tượng cho nhiều biến cùng một lúc. Nó có vẻ tương tự như destructuring assignment hoặc list của PHP, ngoại trừ thuộc tính đối tượng thay vì mảng.

Tôi thực sự tìm thấy điều này thông qua một số không quan trọng, vì dường như không có tài liệu về nó. Hãy xem mã này:

function gimmeAnObject() { 
    return { 
     foo: "hey", 
     bar: "sup" 
    }; 
} 

console.log(gimmeAnObject()); // Object { foo="hey", bar="sup" } 

var { foo, bar } = gimmeAnObject(); 

console.log(foo); // hey 
console.log(bar); // sup 

Tôi cũng nhận thấy rằng điều này chỉ hoạt động trong Firefox. Thay vào đó, Chrome sẽ gặp lỗi: "Cú pháp không bắt buộc: Mã thông báo không mong muốn {". Điều đó giải thích tại sao tôi không nhìn thấy nó trước khi tôi bắt đầu xem xét mã bổ sung của Firefox.

Có ai khác nhìn thấy loại khai báo biến này trước đây không? Tại sao tôi không thể tìm thấy bất kỳ tài liệu nào về nó? Kể từ khi nó chỉ hoạt động trong Firefox, tôi nghĩ rằng nó có thể là một điều Mozilla, nhưng tôi thậm chí không thể tìm thấy bất cứ điều gì về nó trên MDN. Sau đó, một lần nữa, có lẽ tôi chỉ không biết những gì để tìm kiếm.

+0

bản sao có thể có của [Khai báo liên tục với khối] (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

+1

Tìm thấy câu hỏi này trong khi soạn một câu hỏi gần như giống hệt của riêng tôi :) – Motti

Trả lời

5

Nhìn vào "Destructuring chuyển nhượng" liên kết (ví dụ: http://en.wikipedia.org/wiki/JavaScript_syntax#Assignmenthttp://dailyjs.com/2011/09/12/destructuring/) nó trông như thế này xây dựng phân destructuring.

Wikipedia:

In Mozilla's JavaScript, since version 1.7, destructuring assignment allows the assignment of parts of data structures to several variables at once. The left hand side of an assignment is a pattern that resembles an arbitrarily nested object/array literal containing l-lvalues at its leafs which are to receive the substructures of the assigned value.

Trong mảng JavaScript và các đối tượng có nhiều hoặc ít hơn như nhau nên nó không phải là rất ngạc nhiên khi xây dựng hỗ trợ cho mảng cũng được hỗ trợ cho các đối tượng.

+1

Huh, có vẻ như bạn đã đúng. Tôi tự hỏi tại sao có rất ít tài liệu về nó, mặc dù. Tôi đoán không ai nhưng Mozilla thấy tính hữu ích của nhiệm vụ phá hoại. – grant

0

Bạn không thể làm điều đó. Bạn phải đặt tên một var và làm điều gì đó như thế này:

var myObj = (function(){ 
    return { 
     foo: 'foo', 
     bar: 'bar' 
    }; 
})(); 
+1

Bạn Tôi nghĩ như vậy, có, nhưng có vẻ như trong Firefox, bạn có thể. Hãy thử chạy liên kết jsFiddle mà tôi đã đăng trong Firefox với một giao diện điều khiển đang mở. – grant

+0

Có thể Firefox dễ chấp nhận hơn một chút, hoặc nó chỉ có một cài đặt riêng cho phép nó. Nhưng tôi đoán tuyên bố này không có trong các tiêu chuẩn web –

+2

Nó đang được thêm vào các tiêu chuẩn web. Đợi một vài năm. ;) –

Các vấn đề liên quan