Sự khác biệt là trong cơ chế tra cứu: Nếu bạn sử dụng cú pháp chấm, trình biên dịch sẽ biết tại thời gian biên dịch mà bạn đang truy cập thuộc tính của đối tượng đó. Nếu bạn sử dụng cú pháp khung, tra cứu thực tế của thuộc tính được thực hiện trong thời gian chạy và sẽ phải kiểm tra kiểu hơn - sau khi tất cả, bạn có thể soạn chuỗi khóa động, giá trị có thể thay đổi hoặc thậm chí bạn có thể gọi một hàm thay vì một biến, v.v.
Kết quả là sự khác biệt đáng kể về hiệu suất: Cú pháp khung mất khoảng ba lần để thực thi cú pháp dấu chấm.
Dưới đây là một thử nghiệm tốc độ nhỏ để minh họa cho quan điểm của tôi:
var start : int = getTimer();
var obj:Object = { something : "something" };
for (var i : int = 0; i < 100000000; i++) {
var n:String = obj.something;
}
trace ("Time with dot syntax: "+(getTimer() - start));
start = getTimer();
for (i = 0; i < 100000000; i++) {
var o:String = obj["something"];
}
trace ("Time with bracket syntax: "+(getTimer() - start));
Nếu hai là như nhau, trừ trường hợp ký hiệu, họ nên chính xác cùng một lượng thời gian. Nhưng như bạn có thể thấy, đây không phải là trường hợp. Trên máy của tôi:
Time with dot syntax: 3937
Time with bracket syntax: 9857
cảm ơn, bìa đẹp –
Điểm thưởng cho điểm chuẩn! –