What does = +

I was wondering what the = +_ operator means in JavaScript. It looks like it does assignments.

Example:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};

r = +_;
  • + tries to cast whatever _ is to a number.
  • _ is only a variable name (not an operator), it could be "a", "foo" etc.
  • Example:

    +"1"
    

    cast "1" to pure number 1.

    var _ = "1";
    var r = +_;
    

    r is now 1 , not "1" .

    Moreover, according to the MDN page on Arithmetic Operators:

    The unary plus operator precedes its operand and evaluates to its operand but attempts to converts it into a number, if it isn't already . [...] It can convert string representations of integers and floats, as well as the non-string values true , false , and null . Integers in both decimal and hexadecimal ( "0x" -prefixed) formats are supported. Negative numbers are supported (though not for hex). If it cannot parse a particular value, it will evaluate to NaN .

    It is also noted that

    unary plus is the fastest and preferred way of converting something into a number


    It is not an assignment operator.

  • _ is just a parameter passed to the function.

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
    
  • On the next line r = +_; + infront casts that variable ( _ ) to a number or integer value and assigns it to variable r

  • DO NOT CONFUSE IT WITH += operator


    =+ are actually two operators = is assignment and + and _ is variable name.

    like:

    i = + 5;
    or 
    j = + i;
    or 
    i = + _;
    

    My following codes will help you to show use of =+ to convert a string into int.
    example:

    y = +'5'
    x = y +5
    alert(x);
    

    outputs 10

    use: So here y is int 5 because of =+
    otherwise:

    y = '5'
    x = y +5
    alert(x);
    

    outputs 55

    Where as _ is a variable.

    _ = + '5'
    x = _ + 5
    alert(x)
    

    outputs 10

    Additionally, It would be interesting to know you could also achieve same thing with ~ (if string is int string (float will be round of to int))

    y = ~~'5'  // notice used two time ~
    x = y  + 5
    alert(x);
    

    also outputs 10

    ~ is bitwise NOT : Inverts the bits of its operand. I did twice for no change in magnitude.

    链接地址: http://www.djcxy.com/p/2034.html

    上一篇: 如何检查一个字符串是否包含Objective中的另一个字符串

    下一篇: 什么= +