ฉันเห็นไวยากรณ์นี้ในโพสต์ StackOverflowอื่นและอยากรู้ว่ามันทำอะไร:
var len = this.length >>> 0;
สิ่งที่ไม่>>>บ่งบอก?
ฉันเห็นไวยากรณ์นี้ในโพสต์ StackOverflowอื่นและอยากรู้ว่ามันทำอะไร:
var len = this.length >>> 0;
สิ่งที่ไม่>>>บ่งบอก?
>>>ตั้งค่าบิตเครื่องหมายเป็นศูนย์เสมอแม้ว่าคุณจะเลื่อนด้วยศูนย์บิตก็ตาม
>>>ดำเนินการ: stackoverflow.com/questions/3081987/…
var length = list.length >>> 0; (กรณีการใช้งานเดียวกับของคุณ)
คำตอบ:
นั่นคือผู้ประกอบการได้รับการรับรองการเปลี่ยนแปลงทางขวา ที่น่าสนใจคือมันเป็นตัวดำเนินการแบบ bitwise ตัวเดียวที่ไม่ได้ลงนามใน JavaScript
ตัวดำเนินการ >>> เลื่อนบิตของนิพจน์ 1 ไปทางขวาตามจำนวนบิตที่ระบุในนิพจน์ 2 ศูนย์จะถูกเติมจากด้านซ้าย ตัวเลขที่เลื่อนออกไปทางขวาจะถูกทิ้ง
โดยไม่สนใจความหมายที่ตั้งใจไว้นี่เป็นไปได้มากว่าคุณจะเห็นว่าใช้:
>>> 0 มีความพิเศษตรงที่เป็นตัวดำเนินการเดียวที่จะแปลงประเภทใด ๆ เป็นจำนวนเต็มบวก:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
ในตัวอย่างของคุณvar len = this.length >>> 0นี่คือวิธีการรับความยาวจำนวนเต็มเพื่อใช้ในการวนซ้ำthisไม่ว่าthis.lengthจะเป็นประเภทใดก็ตาม
ในทำนองเดียวกัน~~xสามารถใช้เพื่อแปลงตัวแปรใด ๆ เป็นจำนวนเต็มเซ็น
ตัวดำเนินการนั้นคือการเลื่อนทางขวาเชิงตรรกะ นี่คือจำนวนที่เลื่อน 0 บิต การเปลี่ยนศูนย์บิตทางคณิตศาสตร์ไม่ควรมีผล
แต่ในที่นี้จะใช้เพื่อแปลงค่าเป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงชื่อ
>>>เป็นผู้ประกอบบิตฉลาดกะศูนย์เติมขวา
ผมคิดว่ามีผลเฉพาะของอยู่เป็นจำนวนมากในเชิงบวกคือการลงรอบเต็มที่ใกล้เคียงที่สุดเช่นเดียวกับ>>> 0 Math.floor()ฉันไม่เห็นว่าเหตุใดจึงจำเป็นในตัวอย่างของคุณเนื่องจากโดยทั่วไป.lengthคุณสมบัติ (เช่นของArray) จะเป็นจำนวนเต็มอยู่แล้ว
ฉันยังเห็นการ~~ใช้ที่สั้นกว่าเล็กน้อยในลักษณะเดียวกัน: ~~9.5 == 9; // true.
Math.abs()เมื่อใช้สำหรับจำนวนลบ
>>> 0ใช้จำนวนลบมันจะแปลงเป็นคำชมเชย 2 จากนั้นจะเปลี่ยนไปทางขวา ดังนั้น-14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
parseIntหรือไม่?