2011-12-14 41 views
20

Tôi đã tìm thấy mẫu js sau và bị nhầm lẫn bởi cú pháp. Lưu ý các câu lệnh được phân tách bằng dấu phẩy thay vì dấu chấm phẩy. Dấu phẩy có phải là dấu tách câu lệnh hợp lệ trong js không? Tôi chưa từng thấy điều này trước đây.Dấu tách câu lệnh JS có dấu phẩy

$('selector').each(function() { 

      this.onclick = function() { 
       this.select(); 
      }, 

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

      this.onkeyup = function() { 
      } 
    }); 

Trả lời

18

Dấu phẩy là dấu phân tách giữa các biểu thức trong một câu lệnh biểu thức. Vì vậy, điều đó (nếu nó đã được hoàn thành thay vì bị cắt bỏ sau khi "onkeyup" chức năng) chỉ là một tuyên bố biểu thức duy nhất.

Thực sự không có lý do gì để viết mã như vậy, hoặc không có lý do thực sự tốt nào ít nhất. Trong trường hợp cụ thể này, về cơ bản nó có tác dụng tương tự như một loạt các câu lệnh biểu thức riêng biệt được phân tách bằng dấu chấm phẩy.

Dấu phẩy "điều hành" là đáng ngờ trong nhiều trường hợp nhưng hữu ích đôi khi:

var index, len; 
for (index = 0, len = list.length; index < len; ++index) { ... } 

ví dụ. Nó cho phép một để thả nhiều hơn một biểu thức (bài tập thường) vào một ngôn ngữ ngữ pháp cho phép chỉ một biểu thức. Nó thực sự là một dấu hiệu của sự yếu kém cú pháp, theo ý kiến ​​của tôi.

+4

Lưu ý: Nếu có ai quan tâm đến các nhà điều hành dấu phẩy - hãy xem [this] (http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/). – kubetz

+2

Đặc điểm kỹ thuật: http://ecma262-5.com/ELS5_HTML.htm#Section_11.14 –

+1

@dzejkej Trang web tuyệt vời để tìm hiểu sắc thái JS! Phong cách làm tôi nhớ đến những cuốn sách C Primer cũ và C++ Primer Plus trong ngày. –

9

Mỗi nhiệm vụ thực sự là một biểu thức (không phải là một tuyên bố); và các biểu thức có thể được nối vào một biểu thức lớn hơn, mà giá trị cuối cùng của nó chỉ đơn giản là giá trị của biểu thức con cuối cùng; ví dụ.

alert( (w=1+1, x=2+3, y=3+3, z=4+4) ); // shows 8 

Mặc dù mã bạn đã cho thấy hợp lệ, tôi không nghĩ đó là một mẫu tốt để làm theo. Tôi sẽ đổi nó thành dấu chấm phẩy.

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