Làm cách nào để đặt động các giá trị đối tượng Javascript?


98

Thật khó để giải thích trường hợp này bằng lời, hãy để tôi đưa ra một ví dụ:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

Làm cách nào để đặt thuộc tính biến có giá trị thay đổi trong đối tượng JavaScript?



2
Hãy xem kỹ. Có vẻ như bạn vừa quên điều chỉnh mã phiên. Nó nên được myObj[prop] = value;. eval('myObj.'+name)cũng không hoạt động vì biến namekhông tồn tại.
Felix Kling

7
bạn thực sự nên sử dụng nhiều varbàn phím hơn để khai báo biến, sử dụng nhiều dấu chấm phẩy hơn, không sử dụng evalvà chấp nhận nhiều câu trả lời hơn. Làm xong.
jAndy

Câu hỏi của bạn có sai sót - điều đó hiệu quả, nhưng bạn đã mắc sai lầm. Bạn đã viết " myObj[name]" khi tôi khá chắc rằng bạn muốn viết " myObj[prop]".
Ernest Friedman-Hill

Câu trả lời:


150
myObj[prop] = value;

Cần làm việc. Bạn đã trộn lẫn tên của biến và giá trị của nó. Nhưng lập chỉ mục một đối tượng bằng các chuỗi để lấy thuộc tính của nó hoạt động tốt trong JavaScript.


47
myObj.name=value

hoặc là

myObj['name']=value     (Quotes are required)

Cả hai đều có thể thay thế cho nhau.

Chỉnh sửa: Tôi đoán ý bạn là myObj[prop] = value, thay vì myObj [name] = value. Cú pháp thứ hai hoạt động tốt: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Nếu thuộc tính đối tượng là một từ dành riêng, thì cú pháp thứ hai là bắt buộc.
timw4mail

Trong khi điều này là chính xác, nó không thực sự trả lời câu hỏi của anh ta; anh ấy đang tự hỏi phải làm gì khi tên thuộc tính nằm trong một biến.
Ernest Friedman-Hill

Cập nhật câu trả lời đó, bạn có namemà bạn nên cóprop
bcoughlan

5

Bạn có thể lấy thuộc tính giống như cách bạn đặt nó.

foo = {
 bar: "value"
}

Bạn đặt giá trị foo["bar"] = "baz";

Để nhận được giá trị foo["bar"]

sẽ trả về "baz".


5

Bạn cũng có thể tạo một cái gì đó tương tự như một đối tượng giá trị (vo);

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

Hơn bạn chỉ có thể làm;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

Khi bạn tạo một đối tượng myObjnhư bạn có, hãy nghĩ về nó giống như một cuốn từ điển. Trong trường hợp này, nó có hai phím name, và age.

Bạn có thể truy cập các từ điển này theo hai cách:

  • Giống như một mảng (ví dụ myObj[name]); hoặc là
  • Giống như một tài sản (ví dụ myObj.name); lưu ý rằng một số thuộc tính được bảo lưu, vì vậy phương pháp đầu tiên được ưu tiên hơn.

Bạn sẽ có thể truy cập nó như một tài sản mà không gặp bất kỳ vấn đề gì. Tuy nhiên, để truy cập nó như một mảng, bạn sẽ cần coi khóa như một chuỗi.

myObj["name"]

Nếu không, javascript sẽ giả định đó namelà một biến và vì bạn chưa tạo một biến được gọi name, nó sẽ không thể truy cập vào khóa mà bạn đang mong đợi.


1
Vẫn có sự khác biệt giữa myObj[name]myObj.namemặc dù, bởi vì cái đầu tiên đề cập đến một tên biến và cái thứ hai đề cập đến một khóa chữ.
pimvdb

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.