2012-01-16 33 views
63

Tôi biết rằng trong php 5.3 thay vì sử dụng dự phòng ternary cú pháp này điều hành:Javascript viết tắt ternary nhà điều hành

startingNum = startingNum ? startingNum : 1 

... chúng ta có thể sử dụng cú pháp viết tắt cho các nhà khai thác ternary của chúng tôi, nếu có:

startingNum = startingNum ?: 1 

Và tôi biết về các nhà điều hành ternary trong javascript:

startingNum = startingNum ? startingNum : 1 

... nhưng là có một shortha nd?

Xin cảm ơn các bạn!

Trả lời

102
var startingNumber = startingNumber || 1; 

Điều gì đó giống như những gì bạn đang tìm kiếm, vị trí mặc định nếu không xác định?

var foo = bar || 1; // 1 
var bar = 2; 
foo = bar || 1;  // 2 

Bằng cách này, điều này làm việc cho rất nhiều tình huống, bao gồm các đối tượng:

var foo = bar || {}; // secure an object is assigned when bar is absent 
+1

Tôi nghĩ đó là C# –

+0

Thật vậy, được nảy sáng nay. Đã sửa lỗi nhưng cảm ơn vì đã chú ý. –

+1

Bạn không có nghĩa là '||' thay vì '??'? –

13

|| sẽ trả về giá trị truthy đầu tiên nó gặp, và do đó có thể được sử dụng như một nhà điều hành coalescing, tương tự C# 's ??

startingNum = startingNum || 1; 
+0

@Web_Designer - không sao cả. –

+0

Tôi thích lời giải thích của bạn hơn những người khác – ajax333221

+0

@ ajax333221 - cảm ơn! –

10

Vâng, đó là:

var startingNum = startingNum || 1; 

Nói chung, expr1 || expr2 công trình theo cách sau (như đã đề cập bởi the documentation):

Returns expr1 nếu nó có thể được chuyển đổi sang true; nếu không, trả về expr2. Do đó, khi được sử dụng với các giá trị Boolean, || trả về true nếu toán hạng là true; nếu cả hai đều là false, trả lại false.

+0

Không phải là chính xác hơn để nói 'nếu a là truey' so với' nếu a được đánh giá là true'? – JaredPar

+3

@JaredPar: Để tránh sự mơ hồ, tôi đã thay thế lời giải thích chi tiết ban đầu của mình bằng giải thích từ Mạng phát triển Mozilla. Nó sẽ ít mơ hồ hơn. – Tadeck

1
var startingNum = startingNum || 1; 

Trong trường hợp này, bạn có thể sử dụng toán tử OR.

0

Câu trả lời ở trên là chính xác. Trong JavaScript, tuyên bố sau:

startingNum = startingNum ? otherNum : 1 

có thể được diễn tả như

startingNum = otherNum || 1 

kịch bản khác không được đề cập ở đây là nếu bạn muốn giá trị trả về false khi không phù hợp. Các viết tắt JavaScript cho điều này là:

startingNum = startingNum ? otherNum : 0 

Nhưng nó có thể được diễn tả như

startingNum = startingNum && otherNum 

Chỉ muốn để trang trải một kịch bản trong trường hợp những người khác đang tìm kiếm một câu trả lời tổng quát hơn.

0
startingNum = startingNum || 1 

Nếu bạn có một điều kiện với null, như

startingNum = startingNum ? startingNum : null 

bạn có thể sử dụng '& &'

startingNum = startingNum && startingNum 
0

Để thực hiện một ternary như:

boolean_condition ? true_result : false_result 

trong javascript, bạn có thể làm:

(boolean_condition && true_result) || false_result; 

Ví dụ:

(true && 'green') || 'red'; 
=> "green" 
(false && 'green') || 'red'; 
=> "red" 
Các vấn đề liên quan