2010-09-09 19 views

Trả lời

8

Vâng, tất nhiên có những lỗi thực hiện, nghiêm trọng nhất mà tôi đã có để đối phó với đang trên JScript, việc thực hiện Microsoft của tiêu chuẩn, ví dụ:

Định danh của FunctionExpressions nên có thể truy cập chỉ trong phạm vi bên trong của chính hàm:

(function foo() { 
    alert(typeof foo); // "function" 
})(); 

alert(typeof foo); // should be "undefined", on IE shows "function" 

Lỗi này hiện diện trên tất cả các phiên bản IE hiện tại, nó vừa được sửa trên Bản xem trước IE9.

Và trên thực tế thậm chí còn tồi tệ hơn, nó tạo ra hai đối tượng chức năng, ví dụ:

var foo = function bar() {}; 

if (typeof bar != 'undefined') { // the case of IE 
    alert(foo === bar); // false!!! 
} 

Một JScript lỗi nổi tiếng là "DontEnum Bug", nếu một đối tượng trong chuỗi phạm vi của nó chứa một thuộc tính đó không phải là đếm được (có thuộc tính { DontEnum }), nếu tài sản được shadowed trên đối tượng khác, nó sẽ ở lại là không đếm được, ví dụ:

var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString'); 

nó sẽ đánh giá để false trên IE, điều này gây ra vấn đề khi usin g tuyên bố for-in, vì các thuộc tính sẽ không được truy cập.

JScript là triển khai có số lượng sự cố lớn nhất - mặc dù việc triển khai IE9 đang thực sự tốt hơn.

Mục ðích bài viết:

+1

http://stackoverflow.com/questions/3663775/object-name-same-a-function-name/ câu trả lời của bạn đó câu hỏi sẽ làm cho một bổ sung tốt đẹp này. Phần FunctionStatement ít nhất. –

+0

Ví dụ hay. Nếu bạn (hoặc một người nào khác) có nhiều bài viết nêu bật sự khác biệt thực hiện ecmascript 3 trong trình duyệt gửi chúng :) – AlfaTeK

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