Đặt các giá trị của bạn vào một mảng và kiểm tra xem mục của bạn có nằm trong mảng không:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Nếu một trình duyệt bạn hỗ trợ không có Array#includes
phương pháp, bạn có thể sử dụng polyfill này .
Giải thích ngắn về ~
phím tắt dấu ngã:
Cập nhật: Vì chúng tôi hiện có includes
phương pháp, không còn sử dụng ~
hack nữa. Chỉ cần giữ điều này ở đây cho những người quan tâm đến việc biết nó hoạt động như thế nào và / hoặc đã gặp nó trong mã của người khác.
Thay vì kiểm tra nếu kết quả indexOf
là >= 0
, có một phím tắt nhỏ đẹp:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Đây là câu đố: http://jsfiddle.net/HYJvK/
Cái này hoạt động ra sao? Nếu một mục được tìm thấy trong mảng, indexOf
trả về chỉ mục của nó. Nếu vật phẩm không được tìm thấy, nó sẽ trở lại -1
. Mà không đi vào chi tiết quá nhiều, ~
là một Bitwise NOT điều hành , mà sẽ trở lại 0
chỉ cho -1
.
Tôi thích sử dụng ~
phím tắt, vì nó ngắn gọn hơn so với thực hiện so sánh về giá trị trả về. Tôi ước JavaScript có một in_array
hàm trả về Boolean trực tiếp (tương tự PHP), nhưng đó chỉ là suy nghĩ mong muốn ( Cập nhật: hiện tại nó đã được gọi includes
. Xem ở trên). Lưu ý rằng jQuery inArray
, trong khi chia sẻ chữ ký phương thức của PHP, thực sự bắt chước indexOf
chức năng gốc (rất hữu ích trong các trường hợp khác nhau, nếu chỉ mục là thứ bạn thực sự theo đuổi).
Lưu ý quan trọng: Sử dụng phím tắt dấu ngã dường như bị tranh cãi, vì một số người kịch liệt tin rằng mã không đủ rõ ràng và nên tránh bằng mọi giá (xem các bình luận về câu trả lời này). Nếu bạn chia sẻ tình cảm của họ, bạn nên bám sát vào .indexOf(...) >= 0
giải pháp.
Một lời giải thích dài hơn:
Các số nguyên trong JavaScript được ký, có nghĩa là bit ngoài cùng bên trái được dành riêng làm bit dấu; một cờ để cho biết số đó là dương hay âm, với một số 1
âm.
Dưới đây là một số số dương mẫu ở định dạng nhị phân 32 bit:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Bây giờ đây là những con số tương tự, nhưng tiêu cực:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Tại sao kết hợp kỳ lạ như vậy cho các số âm? Đơn giản. Số âm đơn giản là nghịch đảo của số dương + 1; thêm số âm vào số dương sẽ luôn luôn mang lại 0
.
Để hiểu điều này, chúng ta hãy làm một số số học nhị phân đơn giản.
Đây là cách chúng tôi sẽ thêm -1
vào +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Và đây là cách chúng tôi sẽ thêm -15
vào +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Làm thế nào để chúng ta có được những kết quả đó? Bằng cách bổ sung thường xuyên, cách chúng tôi được dạy ở trường: bạn bắt đầu ở cột ngoài cùng bên phải và bạn cộng tất cả các hàng. Nếu tổng lớn hơn số có một chữ số lớn nhất (số thập phân là 9
, nhưng ở dạng nhị phân 1
), chúng tôi sẽ chuyển phần còn lại sang cột tiếp theo.
Bây giờ, như bạn sẽ nhận thấy, khi thêm một số âm vào số dương của nó, cột ngoài cùng bên phải không phải là tất cả 0
sẽ luôn có hai 1
s, khi được thêm vào với nhau sẽ dẫn đến 2
. Biểu diễn nhị phân của hai bản thể 10
, chúng tôi mang 1
đến cột tiếp theo và đặt 0
kết quả cho cột đầu tiên. Tất cả các cột khác ở bên trái chỉ có một hàng với a 1
, do đó, cột 1
được chuyển từ cột trước sẽ lại thêm vào 2
, sau đó sẽ tiếp tục ... Quá trình này lặp lại cho đến khi chúng ta đến cột ngoài cùng bên trái, trong đó việc 1
phải mang đi không có nơi nào để đi, vì vậy nó tràn ra và bị mất, và chúng ta còn lại với 0
tất cả.
Hệ thống này được gọi là Bổ sung 2 . Bạn có thể đọc thêm về điều này ở đây:
Đại diện bổ sung cho 2 số nguyên đã ký .
Bây giờ khóa học sự cố trong phần bù của 2 đã kết thúc, bạn sẽ nhận thấy đó -1
là số duy nhất có đại diện nhị phân là 1
tất cả.
Sử dụng ~
toán tử bitwise NOT, tất cả các bit trong một số đã cho được đảo ngược. Cách duy nhất để 0
quay trở lại từ việc đảo ngược tất cả các bit là nếu chúng ta bắt đầu với 1
tất cả.
Vì vậy, tất cả điều này là một cách nói dài dòng ~n
sẽ chỉ trở lại 0
nếu n
có -1
.
in
?