Tôi đã thấy cú pháp này trên một bài đăng StackOverflow khác và tò mò không biết nó có tác dụng gì:
var len = this.length >>> 0;
Không gì >>>có nghĩa?
Tôi đã thấy cú pháp này trên một bài đăng StackOverflow khác và tò mò không biết nó có tác dụng gì:
var len = this.length >>> 0;
Không gì >>>có nghĩa?
>>>luôn đặt bit dấu thành 0, ngay cả khi bạn dịch chuyển bằng 0 bit.
>>>toán tử trong trường hợp này : stackoverflow.com/questions/3081987/…
var length = list.length >>> 0; (trường hợp sử dụng giống như một của bạn)
Câu trả lời:
Đó là một toán tử ca bên phải không dấu . Điều thú vị là, nó là toán tử bitwise duy nhất không được đăng nhập trong JavaScript.
Toán tử >>> dịch các bit của biểu thức1 sang phải bằng số bit được chỉ định trong biểu thức2. Các số 0 được điền từ bên trái. Các chữ số bị dịch chuyển sang bên phải sẽ bị loại bỏ.
Bỏ qua ý nghĩa dự định của nó, đây rất có thể là nơi bạn sẽ thấy nó được sử dụng:
>>> 0 là duy nhất ở chỗ nó là toán tử duy nhất sẽ chuyển đổi bất kỳ kiểu nào thành số nguyên dương:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
Trong ví dụ của bạn var len = this.length >>> 0, đây là một cách lấy độ dài số nguyên để sử dụng để lặp lại this, bất kỳ loại nào this.lengthcó thể là.
Tương tự, ~~xcó thể được sử dụng để chuyển bất kỳ biến nào thành số nguyên có dấu.
Toán tử đó là một chuyển dịch phải hợp lý. Ở đây số được dịch chuyển 0 bit. Sự dịch chuyển của các bit 0 về mặt toán học sẽ không có tác dụng.
Nhưng ở đây nó được sử dụng để chuyển đổi giá trị thành một số nguyên 32 bit không dấu.
>>>là một toán tử khôn ngoan, dịch chuyển phải không điền .
Tôi nghĩ tác dụng duy nhất của >>> 0một số dương là làm tròn xuống số nguyên gần nhất, giống như Math.floor(). Tôi không hiểu tại sao điều này lại cần thiết trong ví dụ của bạn, vì nói chung một thuộc .lengthtính (ví dụ: của an Array) sẽ là một số nguyên rồi.
Tôi cũng thấy ngắn hơn một chút ~~được sử dụng trong cùng một cách: ~~9.5 == 9; // true.
Math.abs()khi được sử dụng cho các số âm.
>>> 0với một số âm, nó sẽ chuyển nó thành lời khen của 2, sau đó sẽ chuyển đúng. Do đó -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
parseInt?