ใส่ค่าของคุณลงในอาร์เรย์และตรวจสอบว่ารายการของคุณอยู่ในอาร์เรย์:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
หากเบราว์เซอร์ที่คุณสนับสนุนไม่มีArray#includes
วิธีคุณสามารถใช้polyfill นี้ได้
คำอธิบายสั้น ๆ ของ~
ทางลัดตัวหนอน:
อัปเดต:เนื่องจากตอนนี้เรามีincludes
วิธีการแล้วจึงไม่มีประโยชน์ในการใช้~
แฮ็คอีกต่อไป เพียงแค่เก็บไว้ที่นี่สำหรับผู้ที่สนใจที่จะรู้ว่ามันทำงานอย่างไรและ / หรือได้พบมันในรหัสของผู้อื่น
แทนที่จะตรวจสอบว่าผลลัพธ์indexOf
เป็น>= 0
หรือไม่มีทางลัดที่ดีเล็กน้อย:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
นี่คือซอ: http://jsfiddle.net/HYJvK/
มันทำงานอย่างไร หากพบรายการในอาร์เรย์ให้indexOf
ส่งคืนดัชนี -1
หากรายการไม่พบก็จะกลับมา โดยไม่ลงรายละเอียดมากเกินไป~
เป็นค่าที่เหมาะสมไม่ได้ผู้ประกอบการที่จะกลับมาเฉพาะสำหรับ0
-1
ฉันชอบใช้~
ทางลัดเนื่องจากมันสั้นกว่าการเปรียบเทียบค่าส่งคืน ฉันหวังว่าจาวาสคริปต์จะมีin_array
ฟังก์ชั่นที่ส่งกลับบูลีนโดยตรง (คล้ายกับ PHP) แต่นั่นเป็นเพียงแค่ความคิดที่ปรารถนา ( อัปเดต:ตอนนี้มันทำแล้วเรียกว่าincludes
ดูด้านบน) โปรดทราบว่า jQuery inArray
ในขณะที่แชร์ลายเซ็นของวิธีการของ PHP จะเลียนแบบภาษาของจริงindexOf
ฟังก์ชัน (ซึ่งมีประโยชน์ในหลายกรณีหากดัชนีคือสิ่งที่คุณต้องการอย่างแท้จริง)
หมายเหตุสำคัญ:การใช้ช็อตคัตตัวหนอนดูเหมือนว่าจะมีการถกเถียงกันอย่างรุนแรงเนื่องจากบางคนเชื่อว่ารหัสไม่ชัดเจนเพียงพอและควรหลีกเลี่ยงค่าใช้จ่ายทั้งหมด (ดูความคิดเห็นในคำตอบนี้) หากคุณแบ่งปันความเชื่อมั่นคุณควรยึด.indexOf(...) >= 0
แนวทางแก้ไข
คำอธิบายอีกต่อไปเล็กน้อย:
จำนวนเต็มใน JavaScript มีการลงชื่อซึ่งหมายความว่าบิตซ้ายสุดถูกสงวนไว้เป็นบิตลงชื่อ ธงเพื่อระบุว่าจำนวนเป็นค่าบวกหรือลบโดยมี1
ค่าลบ
นี่คือตัวอย่างตัวเลขในรูปแบบไบนารี 32 บิต:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
ตอนนี้ที่นี่มีตัวเลขเดียวกัน แต่เป็นลบ:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
ทำไมชุดค่าผสมดังกล่าวแปลกสำหรับจำนวนลบ? ง่าย จำนวนลบเป็นเพียงค่าผกผันของจำนวนบวก + 1 0
การเพิ่มจำนวนลบไปยังหมายเลขที่ดีควรผลผลิตเสมอ
เพื่อให้เข้าใจสิ่งนี้ลองทำเลขคณิตไบนารีง่ายๆ
นี่คือวิธีการที่เราจะเพิ่ม-1
ไป+1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
และนี่คือวิธีการที่เราจะเพิ่ม-15
ไป+15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
เราจะได้รับผลลัพธ์เหล่านั้นได้อย่างไร ด้วยการเพิ่มปกติวิธีที่เราสอนในโรงเรียน: คุณเริ่มต้นที่คอลัมน์ขวาสุดและคุณรวมแถวทั้งหมด หากผลรวมมากกว่าตัวเลขหลักเดียวที่ยิ่งใหญ่ที่สุด (ซึ่งเป็นทศนิยม9
แต่ในรูปแบบเลขฐานสอง1
) เราจะนำส่วนที่เหลือไปยังคอลัมน์ถัดไป
ตอนนี้เป็นคุณจะแจ้งให้ทราบเมื่อมีการเพิ่มจำนวนลบไปยังหมายเลขบวกที่คอลัมน์ขวามากที่สุดที่ไม่ได้ทั้งหมด0
เสมอจะมีสอง1
s 2
ซึ่งเมื่อรวมเข้าด้วยกันจะส่งผลให้ การแทนเลขฐานสองของสิ่งมีชีวิตทั้งสอง10
เราจะนำ1
ไปยังคอลัมน์ถัดไปและวาง0
ผลลัพธ์ในคอลัมน์แรก คอลัมน์อื่น ๆ ทางด้านซ้ายมีเพียงหนึ่งแถว1
เท่านั้นดังนั้นการ1
ดำเนินการจากคอลัมน์ก่อนหน้าจะรวมกันอีกครั้ง2
ซึ่งจะดำเนินการต่อไป ... กระบวนการนี้จะทำซ้ำตัวเองจนกว่าเราจะไปที่คอลัมน์ซ้ายสุด ที่1
จะต้องดำเนินการต่อไปไม่มีที่ไหนเลยดังนั้นมันจึงล้นและหายไปและเราก็เหลือไว้ด้วย0
กัน
ระบบนี้เรียกว่าการเติมเต็ม 2 คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่นี่:
การเป็นตัวแทนที่สมบูรณ์ของ 2 สำหรับจำนวนเต็มที่ลงนามแล้ว
ตอนนี้หลักสูตรความผิดพลาดในส่วนประกอบ 2 จบลงแล้วคุณจะสังเกตเห็นว่า-1
เป็นหมายเลขเดียวที่มีการแทนค่าฐานสอง1
ทั้งหมด
การใช้ตัวดำเนินการ~
bitwise NOT บิตทั้งหมดในจำนวนที่กำหนดจะกลับด้าน วิธีเดียวที่จะ0
กลับมาจากการแปลงกลับบิตทั้งหมดคือถ้าเราเริ่มต้นด้วย1
ทุกอย่าง
ดังนั้นทั้งหมดนี้เป็นวิธีที่ยืดยาวในการบอกว่า~n
จะกลับมา0
ถ้าn
เป็น-1
เท่านั้น
in
?