2010-07-02 39 views
11
the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach(); 

Rõ ràng, điều này không hợp lệ. Chú ý ";" giữa appendTo()the_styles=null. Làm thế nào để viết nó trên 1 dòng và vẫn có nhiều biểu thức như thế?Toán tử Ternary trong JavaScript với nhiều biểu thức?

+0

Chỉ là một lời khuyên: toán tử bậc ba trong một số ngôn ngữ khác không được sử dụng để viết câu lệnh hoàn chỉnh, nhưng chỉ là phần biểu thức (tức là phần bên phải của dấu '='). Trong Java điều này sẽ không biên dịch ở nơi đầu tiên. Tốt hơn là không nên tạo thói quen này. – FK82

Trả lời

19

Sử dụng toán tử dấu phẩy theo cách này:

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles = $('.stylesheet').detach(); 

Đây là những gì Trung tâm Nhà phát triển Mozilla viết về các nhà điều hành dấu phẩy:

Bạn có thể sử dụng toán tử dấu phẩy khi bạn muốn bao gồm nhiều biểu thức ở một vị trí yêu cầu một biểu thức duy nhất. Cách sử dụng phổ biến nhất của toán tử này là cung cấp nhiều tham số trong vòng lặp for.

đọc thêm ở đây: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

+0

Đó là một hình thức thực sự gọn gàng. Tôi cũng không nghĩ rằng niềng răng để thay đổi sâu sắc ý nghĩa của tuyên bố.Tôi không nghĩ rằng tôi muốn viết này ngay cả một cách tình cờ, nhưng so sánh 'var x = 1, y = 2, z = 3;' và 'var x = (1, y = 2, z = 3);'. Trong trường hợp đầu tiên, 'x' được đặt thành' 1'. Trong trường hợp thứ hai, 'x' được đặt thành' 3'. Đó là thực sự, thực sự gọn gàng. – Andrew

2
the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc> 

Chỉ cần bọc khối mã trong (function() {})().

Bây giờ cho phần khó khăn: lý do tại sao bạn có muốn thực hiện việc này không? Có lẽ có một giải pháp tốt hơn!

+1

yeah, thats xấu xí, nevermind. Tôi giống như ternary vì chúng sạch sẽ và một dòng duy nhất là tất cả. –

+0

Miễn là mã trong mỗi nhánh là một "dòng" duy nhất thì chúng rất đẹp. Nếu không ... sử dụng nhiều dòng! – mcherm

1

tôi đồng ý với glowcoder nhưng nếu bạn vẫn muốn nó:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach(); 
+0

Vâng, tôi cũng vậy, cảm ơn! –

0
the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach(); 

bạn không cần phải là null nó nếu bạn ghi đè lên nó!

+0

Tôi cần null vì nếu không, nó giữ nguyên giá trị sau lần nhấp đầu tiên và tôi cần một hàm "off/on". –

0
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head'); 
+0

Không hoạt động ... :( –

8

Ai cần các nhà điều hành ternary?

​the_styles = !the_styles && $('.stylesheet').detach()​​​​ || 
      the_styles.appendTo('head') && null;​ 

Đã phải chuyển đổi những biểu hiện xung quanh khi có giá trị null của biểu thức đầu tiên sẽ luôn buộc các biểu thức thứ hai .detach() được đánh giá.

Điều duy nhất về mã thông minh là khi bạn quay lại sau khi nghỉ giải lao, nó sẽ không có ý nghĩa gì ngay cả với bạn. Vì vậy, điều này tốt hơn nhiều:

if(the_styles) { 
    the_styles.appendTo('head') 
    the_styles = null; 
} 
else { 
    the_styles = the_styles.detach('.stylesheet'); 
} 

Với tôi, ngay cả phiên bản đơn giản trên cũng không có ý nghĩa gì cả. Các những gì một phần là hiển nhiên, nhưng lý do tại sao là nó làm điều đó?

+0

+1 - Tôi có câu trả lời tương tự, nhưng đọc sai ý định. Của bạn là đúng. – user113716

+1

@patrick - Tôi mất một thời gian để đánh giá ngắn mạch mà luôn luôn là một tín hiệu la hét để không cố gắng để được thông minh :) – Anurag

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