Что означает value = + _ в JavaScript

Мне было интересно, что означает оператор = + _ в JavaScript. Похоже, он выполняет задания.

Пример:

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

Ответ 1

r = +_;
  • + пытается отличить любое число _ от числа.
  • _ - это имя переменной (а не оператор), это могут быть "a", "foo" и т.д.

Пример:

+"1"

введите "1" в чистый номер 1.

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

r теперь 1, а не "1".

Кроме того, согласно странице MDN для арифметических операторов:

Оператор унарного плюса предшествует своему операнду и оценивает его операнд, но пытается преобразовать его в число, если оно не уже. [...] Он может преобразовывать строковые представления целых чисел и float, а также нестроковые значения true, false и null. Целые числа в десятичных и шестнадцатеричных форматах ("0x" -prefixed) поддерживается. Отрицательные числа поддерживаются (хотя и не для hex). Если оно не может проанализировать определенное значение, оно будет оцениваться до NaN.

Также отмечается, что

унарный плюс - самый быстрый и предпочтительный способ преобразования чего-то в число

Ответ 2

Это не оператор присваивания.

  • _ - это просто параметр, переданный функции.

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
    
  • В следующей строке r = +_; + infront переводит эту переменную (_) в числовое или целочисленное значение и присваивает ее переменной r

НЕ СОХРАНЯЙТЕСЬ с оператором +=

Ответ 3

=+ на самом деле два оператора = - это назначение, а + и _ - имя переменной.

like:

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

Мои следующие коды помогут вам показать использование =+ для преобразования строки в int.
Пример:

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

выводит 10

use: Итак, здесь y есть int 5 из-за =+
в противном случае:

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

выходы 55

Где _ - переменная.

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

выводит 10

Кроме того, Было бы интересно узнать, что вы также можете достичь того же с помощью ~ (если строка является int string (float будет round to to int))

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

также выводит 10

~ побитовое NOT: инвертирует бит своего операнда. Я делал дважды без каких-либо изменений в величине.

Ответ 4

Это не =+. В JavaScript + означает изменение его на число.

+'32' возвращает 32.

+'a' возвращает NaN.

Итак, вы можете использовать isNaN(), чтобы проверить, можно ли его изменить на число.

Ответ 5

Это подлый.

Важно понять, что символ подчеркивания здесь на самом деле является именем переменной, а не оператором.

Символ "плюс" перед этим получает положительное числовое значение подчеркивания - то есть эффективно лить значение подчеркивания как int. Вы можете добиться такого же эффекта с помощью parseInt(), но, вероятно, использование знака плюса используется здесь, потому что оно более кратким.

И это просто оставляет знак равенства как стандартное присвоение переменной.

Вероятно, это не преднамеренно написано, чтобы запутать, поскольку опытный Javascript-программист обычно распознает символ подчеркивания как переменную. Но если вы не знаете, что это определенно очень запутанно. Я, конечно, не писал бы так; Я не поклонник коротких бессмысленных имен переменных в лучшие времена. Если вы хотите, чтобы короткие имена переменных в JS-коде сохранялись, используйте minifier; не записывайте его с короткими переменными, чтобы начать с.

Ответ 6

= + _ будет отличать _ в число.

So

var _ = "1",
   r = +_;
console.log(typeof r)

выводит номер.

Ответ 7

Я полагаю, вы имеете в виду r = +_;? В этом случае это преобразование параметра в Number. Скажем _ равно '12.3 ', затем +'12.3' возвращает 12.3. Поэтому в цитируемой заявке +_ присваивается r.

Ответ 8

_ - это просто имя переменной, переданное как параметр функции hexbin.radius и +, вставляемое в число

Позвольте мне сделать то же самое, что и ваша функция.

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}

и запустите эту примерную функцию, которая выводит

hexbin.radius( "1" );

1 string
1 number false 

hexbin.radius(1);

1 number
1 number false

hexbin.radius([]);

[] object
0 number false

hexbin.radius('a');

a string
NaN number true

hexbin.radius({});

Object {} object
NaN number true

hexbin.radius(true);

true boolean
1 number false

Ответ 9

Будет присвоено новое значение левой стороне переменной.

var a=10;
var b="asg";
var c=+a;//return 10
var d=-a;//return -10
var f="10";

var e=+b;
var g=-f;

console.log(e);//NAN
console.log(g);//-10

Ответ 10

+_ почти эквивалент parseFloat(_). Обратите внимание, что parseInt остановится на не числовом символе, таком как точка, тогда как parshFloat не будет.

EXP:

    parseFloat(2.4) = 2.4 
vs 
    parseInt(2.4) = 2 
vs 
    +"2.4" = 2.4

Exp:

var _ = "3";
    _ = +_;

console.log(_); // will show an integer 3

Очень немного отличий:

Ответ 11

В этом выражении:

r = +_;
  • '+' действует здесь как унарный оператор, который пытается преобразовать значение правильного операнда. Он не преобразует операнд, а оценивает значение. Таким образом, _ останется "1", если он был первоначально, но r станет чистым номером.

Рассмотрим эти случаи, нужно ли применять + для числового преобразования

+"-0" // 0, not -0
+"1" //1
+"-1" // -1
+"" // 0, in JS "" is converted to 0
+null // 0, in JS null is converted to 0
+undefined // NaN
+"yack!" // NaN
+"NaN" //NaN
+"3.14" // 3.14

var _ = "1"; +_;_ // "1"
var _ = "1"; +_;!!_ //true
var _ = "0"; +_;!!_ //true
var _ = null; +_;!!_ //false

Хотя, это самый быстрый цифровой конвертер, я вряд ли рекомендовал бы его чрезмерно использовать, если вообще его использовать. parseInt/parseFloat являются более читаемыми альтернативами.

Ответ 12

Проще говоря, +_ эквивалентен для использования конструктора Number().

Фактически, он даже работает в датах:

var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000

DEMO: http://jsfiddle.net/dirtyd77/GCLjd/


Более подробную информацию можно найти в MDN - раздел Унарный плюс (+):

Оператор унарного плюса предшествует своему операнду и вычисляет его операнд, но пытается преобразовать его в число, если оно еще не было. Хотя унарное отрицание (-) также может конвертировать не числа, унарный плюс является самым быстрым и предпочтительным способом преобразования чего-либо в число, поскольку он не выполняет никаких других операций над номером. Он может преобразовывать строковые представления целых чисел и float, а также значения, отличные от строки, true, false и null. Поддерживаются целые числа в десятичных и шестнадцатеричных форматах ( "0x" -предоставляемые). Отрицательные числа поддерживаются (хотя и не для hex). Если он не может разобрать конкретное значение, он будет оценивать до NaN.