Trước hết, một biểu thức ternary không phải là sự thay thế cho cấu trúc if / other - nó tương đương với cấu trúc if / other trả về một giá trị. Nghĩa là, một mệnh đề if / other là mã, một biểu thức ternary là một biểu thức , có nghĩa là nó trả về một giá trị.
Điều này có nghĩa là một số điều:
- chỉ sử dụng các biểu thức ternary khi bạn có một biến ở bên trái
=
nghĩa là được gán giá trị trả về
- chỉ sử dụng biểu thức ternary khi giá trị được trả về là một trong hai giá trị (hoặc sử dụng biểu thức lồng nhau nếu phù hợp)
- mỗi phần của biểu thức (sau? và sau :) sẽ trả về một giá trị không có tác dụng phụ (biểu thức
x = true
trả về true vì tất cả các biểu thức trả về giá trị cuối cùng, nhưng cũng thay đổi x mà không có bất kỳ ảnh hưởng nào đến giá trị được trả về)
Nói tóm lại - việc sử dụng 'chính xác' của một biểu thức ternary là
var resultofexpression = conditionasboolean ? truepart: falsepart;
Thay vì ví dụ của bạn condition ? x=true : null ;
, nơi bạn sử dụng biểu thức ternary để đặt giá trị củax
, bạn có thể sử dụng biểu thức này:
condition && (x = true);
Đây vẫn là một biểu thức và do đó có thể không vượt qua xác nhận, vì vậy một cách tiếp cận thậm chí tốt hơn sẽ là
void(condition && x = true);
Cái cuối cùng sẽ vượt qua xác nhận.
Nhưng một lần nữa, nếu giá trị mong đợi là boolean, chỉ cần sử dụng kết quả của chính biểu thức điều kiện
var x = (condition); // var x = (foo == "bar");
CẬP NHẬT
Liên quan đến mẫu của bạn, điều này có lẽ phù hợp hơn:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
có lẽ nên được viết làx = (condition ? true : null);
. Bên cạnh đó, trong javascriptnull
đánh giá là sai vì vậy trong trường hợp NÀY, bạn có thểx = (condition);
và đạt được kết quả tương tự.