2011-12-05 5 views
5

là gì sự khác biệt, ưu, nhược điểm của việc hoặcas3 {} vs new Object

var obj = {}; 

VS

var obj = new Object(); 

Tất cả tôi biết là ví dụ thứ hai mất nhiều thời gian. Có lợi ích thực sự nào không?

** EDIT **

function loop() { 
    var start = (new Date()).getTime(); 
    for(var i = 0; i < 1000000; ++i) { 
     //var b = {}; // takes ~548ms on my machine 
     var b = new Object(); // takes ~287ms on my machine 
    } 
    trace((new Date()).getTime() - start); 
    setTimeout(loop, 1); 
} 
loop(); 

Nếu bạn chuyển đổi giữa var b = {};var b = new Object(); Bạn sẽ thấy sự khác biệt hiệu suất. Họ trái ngược với hồi ức của tôi và những gì tôi đã đề cập trong câu hỏi.

Trả lời

3

Theo như tôi biết, chúng tương đương nhau. Bởi "ví dụ thứ hai mất nhiều thời gian hơn", tôi giả sử bạn có nghĩa là chỉ trong thời gian để gõ tuyên bố, và có lẽ một lượng thời gian có thể vô lượng để đánh giá - nhưng thời gian thực hiện phải tương đương.

+0

Câu trả lời của bạn đã khiến tôi phải chạy lại các bài kiểm tra tốc độ. Phát hiện của tôi được đăng trong một EDIT cho câu hỏi của tôi. – Jacksonkr

+0

Tôi sẽ chạy lại thử nghiệm của bạn nhiều lần, khoảng 25 lần cho mỗi biến thể - trong các quy trình hoàn toàn mới - sau đó sử dụng bảng tính để theo dõi và tính giá trị trung bình. (Chỉ không muốn chắc chắn rằng bạn không chạy vào một số huyền thoại phổ biến xung quanh điểm chuẩn vi mô.) – ziesemer

3

Một số thử nghiệm cho tôi biết rằng new Object() là một tỷ lệ phần trăm hợp lý nhanh hơn, mặc dù điều này chỉ so với cú pháp {}, chứ không phải cho bất kỳ công việc nào khác mà bạn có thể muốn thực hiện.

Chức năng kiểm tra:

function time(amount:int, test:Function):Number 
{ 
    var average:Number = 0; 
    var averages:Array = []; 

    for(var n:int = 0; n<amount; n++) 
    { 
     var start:Number = getTimer(); 

     test(); 

     averages[averages.length] = getTimer() - start; 
    } 

    for each(var a:Number in averages) average += a; 

    return average/averages.length; 
} 

Sau đó, hai đối tượng thử nghiệm của chúng tôi:

function short():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = {}; 
} 

function long():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = new Object(); 
} 

Và kết quả:

trace(time(5, short)); // 278.6 
trace(time(5, long)); // 153.6 

Có khoảng một tốc độ tăng 45% sử dụng new Object(), nhưng bạn sẽ nhận thấy rằng tổng thời gian vẫn không đáng kể (ngay cả đối với 1.000.000 lần lặp) .

Cá nhân tôi vẫn sẽ dính vào cú pháp {} vì sự đơn giản và tiện lợi giữa các lý do tùy chọn cá nhân khác.