JavaScript에서 = + _의 의미


252

JavaScript에서 = + _ 연산자가 무엇을 의미 하는지 궁금합니다 . 과제를 수행하는 것처럼 보입니다.

예:

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

57
좋은 옛 접근 연산자-->
ov

12
+는 단항 연산자이며 피연산자는 _입니다.
Pieter Witvoet 2013

44
펄 프로그래머가 기본 변수를 놓을 수없는 것처럼 보인다 ;-)
Michael Wild

4
좋은 구문 강조는 질문에 대답하는 데 도움이 될 것입니다.
hugo der hungrige

18
웃는 얼굴을 만들 수 있습니다x= +_+ 0;
tckmn

답변:


396
r = +_;
  • +_숫자에 관계없이 캐스팅하려고합니다 .
  • _변수 이름 만 (연산자가 아님) a, foo등 이 될 수 있습니다 .

예:

+"1"

"1"을 순수한 숫자 1로 캐스트하십시오.

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

r지금 1은 아닙니다 "1".

또한 산술 연산자MDN 페이지에 따르면 :

단항 더하기 연산자는 피연산자 앞에 오며 피연산자로 평가되지만 숫자가 아닌 경우에는 피연산자 로 변환하려고 시도합니다 . [...] 는 정수와 플로트 문자열 표현뿐만 아니라 문자열이 아닌 값을 변환 할 수있는 true, false그리고 null. 10 진수 및 16 진수 (- "0x"접두사) 형식의 정수 가 지원됩니다. 음수가 지원됩니다 (16 진수는 아님). 특정 값을 구문 분석 할 수 없으면로 평가됩니다 NaN.

또한 주목된다

단항 플러스는 무언가를 숫자로 변환하는 가장 빠르고 선호되는 방법입니다


2
+는 실제로 숫자로 캐스트를 의미합니까, 아니면 +_정말로을 의미 합니까? 0+_이 경우 _0에 추가하기 전에 캐스트해야합니까?
colincameron


17
@ c.cam108-아니요, 비슷하게 동작하지 않습니다. 단항 더하기는 값을 숫자로 변환하지만 이진수 더하기는 +'12' === 12(결과는 숫자)가 아니라 0 + '12' === '012'(결과는 문자열입니다). 그러나 0 - '12' === -12.
Kobi

1
@juzerali 물론이지만, 그것은 좋은 습관이 아닙니다. 더하기;) 사용
Izkata

펄의 기본 변수 $ _
Matthew Lock

95

할당 연산자가 아닙니다.

  • _ 함수에 전달 된 매개 변수 일뿐입니다.

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
  • 다음 줄에서 r = +_; +infront는 해당 변수 ( _)를 숫자 또는 정수 값으로 캐스팅하여 변수에 할당합니다.r

+=운영자 와 혼동하지 마십시오


54

=+실제로 이 개 운영하는 =할당하고 +_변수 이름입니다.

처럼:

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

다음 코드는 문자열int=+ 로 변환하는 사용법을 보여 줍니다 . 예:

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

출력 10

사용 : 그렇지 않으면 여기 y에 int 5=+
있습니다.

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

출력 55

_변수는 어디에 있습니까 ?

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

출력 10

또한,~ (string이 int string (floatint 로 반올림 됨 ) 인 경우 와 동일한 결과를 얻을 수 있다는 것을 알고 흥미로울 것입니다 )

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

또한 출력 10

~비트 단위 NOT : 피연산자의 비트를 반전시킵니다. 나는 크기의 변화없이 두 번했다.


1
x|0double을 int로 변환 하는 데 자주 사용합니다 . 그러나 '~'를 사용하는 것뿐만 아니라 숫자 <2 ^ 32로 제한하는 처벌이 있습니다. + "2e15"는 그렇지 않습니다.
Aki Suihkonen

@AkiSuihkonen 그렇습니다 나는 x|0그때 훨씬 빠르다고 생각 +합니다. 맞 습니까? 좋은 기술 :). (2) 나는 기호 만 사용할 수있는 것이 아니라 ~OP를 보여주기 +위해 사용합니다 ( 나 자신이 사용합니다+ ).
Grijesh Chauhan

말하기 어렵습니다-jsperf가 있지만 그것을 측정하고 싶어합니다. 이 두 연산자는 완전히 다른 의미를 갖습니다. 숫자가 필요하고 정수가 아닌 '+'만 필요한 경우 어쨌든 한 문자가 짧습니다.
Aki Suihkonen

1
실제로 나는 방금 그것을 jsperf- '| 0'의 경우 18M ops, '+'의 경우 19M ops; 성능은 브라우저마다 다를 수 있습니다. jsperf.com/strtoint
Aki Suihkonen

1
@AkiSuihkonen 아, 방금 Firefox에서 jsperf를 테스트했습니다. 큰 차이가 |있습니다.
Tapirboy

16

아닙니다 =+. JavaScript에서 +숫자로 변경하는 것을 의미합니다.

+'32' 32를 반환합니다.

+'a' NaN을 반환합니다.

따라서 isNaN()숫자로 변경할 수 있는지 확인하는 데 사용할 수 있습니다.


16

비열한 것입니다.

여기서 중요한 점은 밑줄 문자 는 실제로 연산자가 아니라 변수 이름이라는 것 입니다.

그 앞에 더하기 부호는 밑줄의 양수 값을 가져옵니다. 즉 밑줄 변수를 효과적으로 int로 캐스팅합니다. 와 같은 효과를 얻을 수 parseInt()있지만 더하기 기호 더하기는 더 간결하기 때문에 여기에서 사용될 수 있습니다.

그리고 그것은 단지 등호를 표준 변수 할당으로 남겨 둡니다.

숙련 된 Javascript 프로그래머가 일반적으로 밑줄을 변수로 인식하므로 혼동하기 위해 의도적으로 작성 되지는 않았을 것입니다 . 그러나 당신이 그것을 모른다면 그것은 매우 혼란 스러울 것입니다. 나는 그것을 그렇게 쓰지 않을 것입니다. 나는 최고의 의미에서 짧은 의미없는 변수 이름의 팬이 아닙니다. 공간을 절약하기 위해 JS 코드에서 짧은 변수 이름을 원한다면 축소기를 사용하십시오. 짧은 변수로 작성하지 마십시오.


1
+1 _은 변수 라는 것을 명시 적으로 지적한 유일한 사람 입니다.
TRiG

@TRiG Starx의 답변은 어떻습니까?
Mathletics

12

= + _는 _를 숫자로 변환합니다.

그래서

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

숫자를 출력합니다.


9

나는 당신이 의미한다고 생각 r = +_;합니까? 이 경우 매개 변수가로 변환 Number됩니다. 말은 _'12입니다 0.3 ', 다음 +'12.3'반환 12.3. 따라서 인용문에서에 +_할당됩니다 r.


6

_단지 AA 변수 이름, 함수의 매개 변수로 전달 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 

헥스 빈 반경 (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

매우 늦었지만 매우 좋은 답변 +.
Grijesh Chauhan 2016 년

5

왼쪽 변수에 새 값을 할당합니다.

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

당신은 잊었 +전과 b.
Attila O.

1
고마워요
Amrendra

3

+_거의이다 상당parseFloat(_). 그 관찰 parseInt반면, 도트 등의 숫자가 아닌 문자에서 중지 parshFloat하지 않습니다.

경험치 :

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

특급 :

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

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

몇 가지 차이점 :


나는 첫 번째 줄에서 당신이 parseInr(_)대신 말하고 싶어한다고 생각 parseFloat(_) 합니까?
Grijesh Chauhan

1
floatparseInt는 숫자가 아닌 문자에서 멈추고 parshFloat는 멈추지 않기 때문에 의미 합니다. EXP : parseFloat(2.4) = 2.4parseInt(2.4) = 2.
Brian

3

간단히 말해 Number () 생성자 를 사용하는 +_ 것과 같습니다 .

실제로 날짜에도 작동합니다.

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

데모 : http://jsfiddle.net/dirtyd77/GCLjd/


자세한 정보는 MDN-단항 플러스 (+) 섹션 에서도 확인할 수 있습니다 .

단항 더하기 연산자는 피연산자 앞에 오며 피연산자로 평가되지만 숫자가 아닌 경우에는 피연산자로 변환하려고합니다. 단항 부정 (-)도 숫자가 아닌 숫자를 변환 할 수 있지만, 단항 더하기는 숫자에서 다른 연산을 수행하지 않기 때문에 무언가를 숫자로 변환하는 가장 빠르고 선호되는 방법입니다. 문자열이 아닌 값 true, false 및 null뿐만 아니라 정수 및 부동 소수점의 문자열 표현을 변환 할 수 있습니다. 10 진수 및 16 진수 ( "0x"접두사) 형식의 정수가 지원됩니다. 음수가 지원됩니다 (16 진수는 아님). 특정 값을 구문 분석 할 수 없으면 NaN으로 평가됩니다.


2

이 표현에서 :

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더 읽기 쉬운 대안입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.