2012-02-07 13 views
14

Tiến hành thống kê các phím của các đối tượng javascript replay các phím theo thứ tự chèn:Phong cách chấp nhận được cho các thư viện Node.js có dựa vào thứ tự khóa đối tượng không?

> for (key in {'z':1,'a':1,'b'}) { console.log(key); } 
z 
a 
b 

Đây không phải là một phần của tiêu chuẩn, nhưng được thực hiện rộng rãi (như đã thảo luận here):

ECMA- 262 không chỉ định thứ tự liệt kê. Các tiêu chuẩn thực tế là để phù hợp với thứ tự chèn, mà V8 cũng có, nhưng với một ngoại lệ:

V8 không đảm bảo về thứ tự liệt kê cho chỉ mục mảng (nghĩa là, một tài sản tên có thể được phân tích thành 32 -bit số nguyên không dấu).

Thực tiễn có thể chấp nhận dựa trên hành vi này khi xây dựng thư viện Node.js không?

+2

tôi thường cố gắng tránh dựa vào bất kỳ hành vi cụ thể nào khi nói đến JS. – zzzzBov

+1

Không, không phải. Trường hợp sử dụng của bạn là gì? – georg

+0

Tôi đã nhìn thấy phong cách này trong một số thư viện nút và muốn kiểm tra với cộng đồng trước khi tôi phát triển các nhà phát triển. Ví dụ, thư viện Dynamo node.js (thương hiệu mới), lấy một đối số lược đồ của hai khóa mà thứ tự là quan trọng. Đầu tiên chỉ định "băm" và thứ hai chỉ định "dải ô". –

Trả lời

12

Tuyệt đối không! Đây không phải là vấn đề của kiểu nhiều như là một vấn đề của chính xác.

Nếu bạn phụ thuộc vào tiêu chuẩn "thực tế", mã của bạn có thể không thành công trên ECMA-262 5th Ed. thông dịch viên tuân thủ vì thông số đó không chỉ định thứ tự liệt kê. Hơn nữa, động cơ V8 có thể thay đổi hành vi của nó trong tương lai, nói về lợi ích của hiệu suất, ví dụ:

1

Không. Dựa vào tiêu chuẩn ECMAScript, hoặc bạn sẽ phải tranh luận với các nhà phát triển về việc liệu một "tiêu chuẩn thực tế" có tồn tại như những người trên con bọ đó hay không.

7

Chắc chắn không phụ thuộc vào theo thứ tự của khóa. Nếu tiêu chuẩn không chỉ định một đơn đặt hàng, thì việc triển khai sẽ miễn phí nếu chúng thực hiện. Hash bảng thường underlie đối tượng như thế này, và bạn không có cách nào để biết khi nào có thể được sử dụng. Javascript có nhiều triển khai và tất cả chúng đều cạnh tranh để nhanh nhất. Thứ tự chính sẽ khác nhau giữa các lần triển khai, nếu không phải bây giờ, sau đó trong tương lai.

+3

"* nếu không phải bây giờ, sau đó trong tương lai. *" - thực sự đó là không, vì động cơ có liên quan với tính tương thích ngược. Tất cả mọi thứ được sử dụng trong một trình duyệt web sẽ không phá vỡ web, và đã có đủ người nhầm lẫn dựa vào trật tự tài sản. Việc triển khai sẽ hội tụ thay vì đa dạng hơn, trừ khi có một số lợi ích hiệu suất đáng sợ. – Bergi

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