Bằng cách nào đó, tất cả các ví dụ, trong khi hoạt động tốt, bị quá tải:
- Họ sử dụng
new Array()
, đó là một mức quá mức (và chi phí chung) cho một mảng kết hợp đơn giản (từ điển AKA).
- Những người tốt hơn sử dụng
new Object()
. Hoạt động tốt, nhưng tại sao tất cả các gõ thêm này?
Câu hỏi này được gắn thẻ "người mới bắt đầu", vì vậy hãy làm cho nó đơn giản.
Cách đơn giản để sử dụng từ điển trong JavaScript hoặc "Tại sao JavaScript không có đối tượng từ điển đặc biệt?":
// create an empty associative array (in JavaScript it is called ... Object)
var dict = {}; // huh? {} is a shortcut for "new Object()"
// add a key named fred with value 42
dict.fred = 42; // we can do that because "fred" is a constant
// and conforms to id rules
// add a key named 2bob2 with value "twins!"
dict["2bob2"] = "twins!"; // we use the subscript notation because
// the key is arbitrary (not id)
// add an arbitrary dynamic key with a dynamic value
var key = ..., // insanely complex calculations for the key
val = ...; // insanely complex calculations for the value
dict[key] = val;
// read value of "fred"
val = dict.fred;
// read value of 2bob2
val = dict["2bob2"];
// read value of our cool secret key
val = dict[key];
Bây giờ hãy thay đổi giá trị:
// change the value of fred
dict.fred = "astra";
// the assignment creates and/or replaces key-value pairs
// change value of 2bob2
dict["2bob2"] = [1, 2, 3]; // any legal value can be used
// change value of our secret key
dict[key] = undefined;
// contrary to popular beliefs assigning "undefined" does not remove the key
// go over all keys and values in our dictionary
for (key in dict) {
// for-in loop goes over all properties including inherited properties
// let's use only our own properties
if (dict.hasOwnProperty(key)) {
console.log("key = " + key + ", value = " + dict[key]);
}
}
Xóa các giá trị cũng dễ dàng:
// let's delete fred
delete dict.fred;
// fred is removed, the rest is still intact
// let's delete 2bob2
delete dict["2bob2"];
// let's delete our secret key
delete dict[key];
// now dict is empty
// let's replace it, recreating all original data
dict = {
fred: 42,
"2bob2": "twins!"
// we can't add the original secret key because it was dynamic,
// we can only add static keys
// ...
// oh well
temp1: val
};
// let's rename temp1 into our secret key:
if (key != "temp1") {
dict[key] = dict.temp1; // copy the value
delete dict.temp1; // kill the old key
} else {
// do nothing, we are good ;-)
}