2011-11-13 65 views
7

Tôi muốn biết, điều này có hợp pháp không?Dấu chấm phẩy có bắt buộc trong câu lệnh javascript không?

function test() 
{ 
    alert ("hello") 
    $("#loading").show(); 
} 

Hoặc tôi nên viết này để thay thế:

function test() 
{ 
    alert ("hello"); 
    $("#loading").show(); 
} 

Are phẩy tùy chọn trong JavaScript? Bởi vì tôi thấy điều này trong diễn đàn:

Không, dấu chấm phẩy thường là tùy chọn trong JavaScript (google cho ASI/dấu chấm phẩy tự động). Sử dụng chúng làm cho mã trông sạch hơn mặc dù và ASI là một tính năng tồi tệ khủng khiếp (ít nhất theo ý kiến ​​của tôi).

+1

Xem: http://stackoverflow.com/questions/7219541/what-is-the-difference-between-semicolons-in-javascript-and-in-python/7219549#7219549 và câu trả lời khác cho câu hỏi – NullUserException

+1

Hai câu lệnh của bạn đều có dấu chấm phẩy - không khác nhau. – Nightfirecat

+0

@Nightfirecat - Ban đầu, chúng không giống như bản chỉnh sửa của NullUserException, đặt dấu chấm phẩy trở lại. Edit: nhưng sau đó gỡ bỏ nó một lần nữa! –

Trả lời

12

Dấu chấm phẩy không phải lúc nào cũng bắt buộc, nhưng tôi luôn khuyên bạn nên sử dụng chúng. Xem ECMAScript spec cho các quy tắc về tự động chèn dấu chấm phẩy:

Một số báo cáo ECMAScript (tuyên bố trống rỗng, tuyên bố thay đổi, tuyên bố biểu hiện, do-while tuyên bố, lệnh continue, break tuyên bố, tuyên bố trở lại, và ném tuyên bố) phải được chấm dứt bằng dấu chấm phẩy. Dấu chấm phẩy như vậy luôn có thể xuất hiện rõ ràng trong văn bản nguồn . Để thuận tiện, tuy nhiên, dấu chấm phẩy như vậy có thể được bỏ qua từ văn bản nguồn trong các tình huống nhất định. Các tình huống này là được mô tả bằng cách nói rằng dấu chấm phẩy tự động được chèn vào luồng mã thông báo mã nguồn trong các tình huống đó.

Cập nhật (giải thích thêm)

Có lẽ tình hình phổ biến nhất được sử dụng để hiển thị tại sao tự động chèn dấu chấm phẩy có thể xấu là đề cập đến bởi @sissonb trong câu trả lời khác. Hãy xem xét những điều sau đây:

function something(a, b) { 
    return 
    a + b; 
} 

gì bạn có thể mong đợi là cho mới xếp hàng để được bỏ qua, và mã hiểu là:

function something(a, b) { 
    return a + b; 
} 

Thật không may, tự động chèn dấu chấm phẩy đi vào chơi, và mã thực sự được diễn giải như sau:

function something(a, b) { 
    return; 
    a + b; 
} 

Và một câu hỏi trống return có nghĩa là hàm trả về undefined. Vì vậy, thay vì một số tiền tốt đẹp của hai đối số, bạn nhận được undefined và có khả năng kết thúc rất bối rối như nơi bạn đã đi sai! Đó là lý do tại sao tôi hoàn toàn đồng ý với tuyên bố trong câu hỏi của bạn rằng chèn dấu chấm phẩy tự động là một sự không hài lòng khủng khiếp.

+0

Một ngoại lệ hợp lý sẽ là một cuộc gọi lại một lớp: 'ar.sort (hàm (a, b) {return f (a) - f (b)})' –

0

phẩy là không bắt buộc. Chúng sẽ tự động được thêm vào cuối dòng nếu thiếu, điều này thực sự khiến mã này trả về không xác định.

return 
{ 
    text:"hello" 
} 
+1

thực sự trả về 'undefined', không hoàn toàn giống với' null' – NullUserException

+0

@NullUserException ఠ_ఠ Cập nhật câu trả lời của tôi. Cảm ơn – sissonb

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