จากคำถามในกลุ่มสมาคมโปรแกรมเมอร์ไทย:
พวก Bitwise operations ในภาษา javascript นี่ได้ใช้กันบ่อยมากไหมคะ พวกเครื่องหมาย
&
|
>>
<<
~
อะไรพวกนี้อะค่ะรู้สึกว่าเวลาเขียนเว็บแล้วแทบไม่ค่อยได้ใช้เลย อยากรู้ว่าในสถานการณ์ไหนถึงจะจำเป็นต้องใช้พวกนี้หรอคะ แล้วแต่ละคำสั่ง มันมีไว้ทำอะไรบ้างหรอคะ (อย่างถ้าเป็นภาษาอื่นที่มัน low-level กว่านี้ เข้าใจว่าอาจจะมีใช้เพื่อด้าน performance แต่กับ js นี่มองไม่เห็นภาพเลยค่ะ)
เอาไว้ทำ bit-field เอาไว้เก็บข้อมูล boolean flag หลายๆ ตัว เช่น
a = [true, true, false, true, false, false, true, false]
ก็เก็บเป็นเลขa = 107
(=0b01101011
อ่านจากขวามาซ้าย) ตัวเดียวพอ เวลาอ่านค่าa[i]
ก็ใช้(a & (1 << i))
ตัวอย่างที่เห็นก็มี Discord API ที่ใช้ bit-field ค่อนข้างเยอะ(~x)
จะเป็น falsy ถ้า x == -1 และ truthy ถ้าเป็นค่าอื่น ก็จะสามารถเขียนif (~a.indexOf(b))
แทนif (a.indexOf(b) !== -1)
ปัจจุบัน string กับ array มี .includes() แล้ว ท่านี้เลยไม่ต้องใช้อีกต่อไป แต่อาจจะยังเห็นอยู่บ้างในโค้ดเก่าๆ(~~x)
เอาไว้ใช้ตัดจุดทศนิยมออกจากตัวเลข ก็คือ สามารถเขียน~~(a / b)
แทนMath.floor(a / b)
ได้ (ตัวอย่างเช่น1 + ~~(Math.random() * 10)
ไว้สุ่มเลขระหว่าง 1 ถึง 10 ได้) ในกรณีที่ (a / b) เป็นจำนวนบวกที่ไม่เกิน 2147483647 (กรณีที่เกินนั้นหรือเป็นจำนวนลบ ให้เป็นการบ้านไปหาคำตอบเอง)