Что означает 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.