JavaScript triple greater than

后端 未结 4 1276
深忆病人
深忆病人 2020-11-27 15:30

I saw this syntax on another StackOverflow post and was curious as to what it does:

var len = this.length >>> 0;

What does >&g

相关标签:
4条回答
  • 2020-11-27 15:57

    Ignoring its intended meaning, this is most likely where you'll see it used:


    >>> 0 is unique in that it is the only operator that will convert any type to a positive integer:

    "string"         >>> 0 == 0
    (function() { }) >>> 0 == 0
    [1, 2, 3]        >>> 0 == 0
    Math.PI          >>> 0 == 3
    

    In your example, var len = this.length >>> 0, this is a way of getting an integer length to use to iterate over this, whatever type this.length may be.


    Similarly, ~~x can be used to convert any variable into a signed integer.

    0 讨论(0)
  • 2020-11-27 15:57

    >>> is a bit-wise operator, zero-fill right shift.

    I think the only effect of >>> 0 on a positive number is to round down to the nearest integer, same as Math.floor(). I don't see why this would be necessary in your example, as generally a .length property (e.g. of an Array) would be an integer already.

    I've also seen the slightly shorter ~~ used in the same way: ~~9.5 == 9; // true.

    0 讨论(0)
  • 2020-11-27 16:13

    That operator is a logical right shift. Here the number is shifted 0 bits. A shift of zero bits mathemetically should have no effect.

    But here it is used to convert the value to an unsigned 32 bit integer.

    0 讨论(0)
  • 2020-11-27 16:16

    That's an unsigned right shift operator. Interestingly, it is the only bitwise operator that is unsigned in JavaScript.

    The >>> operator shifts the bits of expression1 right by the number of bits specified in expression2. Zeroes are filled in from the left. Digits shifted off the right are discarded.

    0 讨论(0)
提交回复
热议问题