2012-05-17 25 views
31

Tôi đang cố gắng để tạo ra một đối tượng từ điển như vậychính cho javascript điển không được lưu trữ như giá trị nhưng như biến tên

var obj = { varName : varValue }; 

Những gì tôi đang chờ đợi nếu varName='foo' là, obj nên {'foo', 'some value' } tuy nhiên những gì Tôi thấy là {varName, 'some value'} giá trị của biến không được sử dụng nhưng một tên biến là một khóa. Làm thế nào để tôi làm cho nó để giá trị varible được sử dụng như là chìa khóa?

+0

thể trùng lặp của [Làm thế nào để sử dụng một biến như một chìa khóa bên trong đối tượng initialiser] (http://stackoverflow.com/questions/ 10631007/how-to-use-a-biến-as-a-key-bên trong-đối tượng-initialiser) – zzzzBov

Trả lời

63

Hãy thử như thế này:

var obj = {}; 
obj[varName] = varValue; 

Bạn không thể khởi tạo đối tượng với các phím 'động' ở tuổi Javascript. var obj = { varName : varValue }; tương đương với var obj = { "varName" : varValue };. Đây là cách Javascript diễn giải.

Tuy nhiên mới ECMAScript hỗ trợ computed property names, và bạn có thể làm:

var obj = { [varName]: varValue }; 
+4

Công trình này! Cảm ơn. Mặc dù tôi vẫn còn tò mò tại sao cách khác không hiệu quả. –

+2

Vì thông thường khi bạn đang xây dựng các đối tượng với một bộ khóa cố định (đó là những gì mà cú pháp '{}' đang làm) bạn biết những khóa đó là gì. Cách thay thế sẽ yêu cầu tất cả những người _does_ muốn các khóa cố định để đặt dấu ngoặc kép xung quanh chúng, điều này sẽ có nhiều công việc hơn cho nhiều người hơn trong thời gian đó. – Dan

+0

Bạn cũng có thể thấy câu hỏi này tôi vừa trả lời: http://stackoverflow.com/questions/10631007/how-to-use-a-variable-as-a-key-inside-object-initialiser – HBP

17

Bắt đầu với ECMAScript năm 2015, trong đó đã nhận được hỗ trợ trình duyệt tốt hơn trong năm ngoái (s), bạn có thể sử dụng các ký hiệu chỉ số biến:

var obj = { [varName] : varValue }; 

Đây là cú pháp giống như

var obj = {}; 
obj[varName] = varValue; 

Bạn cũng có thể sử dụng biểu thức hoặc biểu tượng như chính tài sản:

var contact = { 
    company: companyName, 
}; 
var companiesWithContacts = { 
    [contact.company.toLowerCase()]: true 
}; 
var myList = { 
    [Symbol.iterator]: createIteratorForList 
}; 
function createIteratorForList() { ... } 
Các vấn đề liên quan