Mã phải dễ đọc, do đó, ngắn gọn không có nghĩa là ngắn gọn bất cứ giá nào - vì vậy bạn nên đăng lại lên https://codegolf.stackexchange.com/ - vì vậy thay vào đó, tôi khuyên bạn nên sử dụng biến cục bộ thứ hai có tên index
để tối đa hóa khả năng đọc hiểu ( với chi phí thời gian chạy tối thiểu, tôi lưu ý):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Nhưng nếu bạn thực sự muốn cắt giảm biểu hiện này, vì bạn là một kẻ tàn bạo tàn nhẫn với đồng nghiệp hoặc cộng tác viên dự án của mình, thì đây là 4 cách tiếp cận bạn có thể sử dụng:
1: Biến tạm thời trong một var
câu lệnh
Bạn có thể sử dụng var
khả năng của câu lệnh để xác định (và gán) một biến tạm thời thứ hai index
khi được phân tách bằng dấu phẩy:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Chức năng ẩn danh tự thực hiện
Một tùy chọn khác là một chức năng ẩn danh tự thực thi:
// Traditional syntax:
var value = function( x ) { return x !== -1 ? x : 0 }( someArray.indexOf(3) );
// ES6 syntax:
var value = ( x => x !== -1 ? x : 0 )( someArray.indexOf(3) );
3: Toán tử dấu phẩy
Ngoài ra còn có "toán tử dấu phẩy" khét tiếng mà JavaScript hỗ trợ, cũng có trong C và C ++.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
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 trong một vị trí yêu cầu một biểu thức duy nhất.
Bạn có thể sử dụng nó để giới thiệu các tác dụng phụ, trong trường hợp này bằng cách gán lại cho value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Điều này hoạt động vì var value
được diễn giải trước tiên (vì đó là một câu lệnh), sau đó là value
phép gán ngoài cùng bên trái, bên trong nhất và sau đó là bên phải của toán tử dấu phẩy và sau đó là toán tử bậc ba - tất cả đều là JavaScript hợp pháp.
4: Chỉ định lại trong một biểu thức con
Bình luận viên @IllusingBrian đã chỉ ra rằng việc sử dụng toán tử dấu phẩy (trong ví dụ trước) là không cần thiết nếu phép gán cho value
được sử dụng như một biểu thức con có dấu ngoặc đơn:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Lưu ý rằng việc sử dụng phủ định trong các biểu thức logic có thể khó làm theo đối với con người hơn - vì vậy tất cả các ví dụ trên có thể được đơn giản hóa để đọc bằng cách thay đổi idx !== -1 ? x : y
thành idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
và không phải là mộtif/else