2014-10-16 15 views
0

그냥 JS에 자동 형 변환의 특이한 부작용을 발견 : 같은 결과 (true)를 반환합니다|| 대신에 +를 사용하는 것이 좋지 않습니까?

if (false + false) { 

} 

그리고 모두 (false || true)(false + true) :

if (false || false) { 

} 

가 동일합니다.

+이 경우 더 많은 용도가 표시되지 않는 이유는 무엇입니까? +|| 대신 사용하면 안되는 확실한 이유가있을 수 있습니다 (혼동을 일으킬 수있는 코드 외에도)?

여분의 캐스팅으로 인해 성능이 저하 될 수 있다고 상상해보십시오.하지만 헤이 - 문자를 저장하고 있습니다! 다른 대신에 하나의 마이크로 최적화를위한 예!

+7

최대한 짧은 문자로 코드를 작성하고 명확한 소스 코드를 작성하려면 옵티 마이저로 남겨 두겠습니다. '+'의 사용은 전혀 명확하지 않으며, 새로운 개발자들을 끝까지 혼란스럽게 만들 것입니다. – ajp15243

+8

* "왜이 경우 더 이상 사용하지 않습니까?"* 반대의 질문에 답할 수 있습니까? 왜 누군가가 || 대신에 +를 사용합니까? –

+3

왜 아래 표를 던질 수 있나요? 이 질문은 어떻게 든 SO의 형식에 맞지 않습니까? –

답변

13

이다?

  1. 사람들은 그것을 사용하는 생각하지 않는다, 그들은 수학을 논리를하지 생각하고 있기 때문에 다음은

이 떠오르는 이유가 있습니다.

  • +은 항상 표현의 양쪽을 평가합니다. ||은 왼쪽 피연산자가 truthy 인 경우 오른쪽 피연산자 을 전혀 계산하지 않습니다.. 상관하지 않습니다 if (boolean || boolean); if (func() || func())에 많은 영향을 미칠 수 있습니다.

  • || 엄청나게 유용하다, 하지true 또는 false을 표현의 결과가 제 truthy 오퍼랜드의 값이 wonderfully powerful behavior있다. +은 숫자 나 문자열을 생성하므로 덜 유용합니다.

  • ||은 진실성/허위에 대한 논증을 테스트합니다. +은 양쪽에 보이는 내용에 따라 숫자 나 문자열로 변환합니다. 따라서 ||+의 결과가 다른 경우가 많이 있습니다.

  • +을 사용하면 +이 어느 유형이든지간에 다양한 유형으로 처리 할 수 ​​있으므로 코드를 덜 명확하고 유지하기가 더 어려워 질 것입니다.

  • 그것은 단지 잘못된 연산자입니다. (알았어, 이건 꽤 주관적입니다 :-)). || 거기에 논리적 비교를 위해, 왜 그것을 사용하지? 아직

    var a=-1; 
    var b=false; 
    var c=1; 
    if(a)alert(true); 
    if(b)alert(true); 
    if(c)alert(true); 
    //two of the above coerce to `true` 
    if(a+b+c) 
    { 
        alert("phew"); 
    } 
    else 
    { 
        //yet we hit this branch 
        alert("wtf"); 
    } 
    

    좋은 생각 :

  • +2

    나는이 대답을 정말로 좋아한다. 이 문제에 관해 밝혀 줘서 고마워. –

    +0

    커뮤니티 위키 답변으로 변환 하시겠습니까? 그것을위한 좋은 사례 인 것 같습니다.그리고 당신이 요점을 필요로하는 것 같지 않아요;) – j08691

    +0

    @ j08691 : LOL 사실, 커뮤니티의 반응을 요약하기보다는 내 마음에 무엇이 왔는지를 그냥 버렸기 때문에 사실입니다. –

    1

    || 때문에 또는 연산자이며, 단지 false 발생하는 0 + 0을 추가 +보다 그 의미가 더 잘 작용한다.

    +을 사용하여 주조는 falsetrue에 대한 01에 완료, 2 개 개의 논리 값이 추가 된 이유 중 하나는 모를 수도 있지만, ||은 분명합니다.

    그리고 마지막으로

    나는 여분의 캐스팅으로 인해 충돌 성능,하지만 헤이가있을 수 있습니다 상상

    - 문자를 저장하는 로지텍은! 다른 곳의 장소에서 마이크로 최적화가 필요합니다. (암시 적 false로 주조한다)

    추가 캐스팅> 문자를 저장

    2

    false || false 반환 false

    false + false 반환 0

    그래서 네, 그것은 작업의 종류는 않지만, ..

    ||은 다른 프로그래밍 언어 에서처럼이 작업을 수행하는 표준 방법입니다. +은 확실히 사람들을 혼란스럽게하고 결국 정확하지 :

    false || true === truetrue

    false + true === true은 왜 +이 경우에 더 많은 사용을 볼 수 없습니다 false

    관련 문제