2010-03-04 9 views
0

우리가 형태의 기능을 가지고 말할 수 있습니다 참조를 반환? 내 마음으로 나는 중 하나를 할 수있는 다음과 같은 : 가장 좋은 방법은 일반적으로

  • 반환 '널 (null)'
  • 반환 '정의'(위)를

    1. 그냥 '반환'
    2. 가장 좋은 방법입니다

    그리고 왜?

  • 답변

    4

    JavaScript에서는 명시 적으로 반환하지 않더라도 모든 함수가 반환합니다. return 문이 없으면 함수는 undefined을 반환합니다. 그러나 한 가지 예외가 있습니다. new 문을 사용하면이 함수는 this의 인스턴스를 반환합니다. 그래서

    는 :

    function doFoo() 
    { 
        // do nothing 
    } 
    

    ,

    function doFoo() 
    { 
        return; 
    } 
    

    function doFoo() 
    { 
        return undefined; 
    } 
    

    는 자바 스크립트 엔진에 모두 동일합니다.

    JavaScript에서는 반환 값으로 null을 사용하는 것이 좋습니다. null은 개체이며 형식 검사를 수행하면 이상한 논리로 이어질 수 있습니다. null을 리턴 값으로 사용할 경우 if()의 표현식을보다 명확하게 변경하십시오. 단지 예상 반환 값은 객체의 어떤 종류의 기능에서 실패 값으로 null을 반환에 내가 추천 할 것입니다

    . 기대하는 반환 값이 일종의 프리미티브라면 나는 undefined을 고려할 것입니다.

    foo = getReferenceToFoo('myID'); 
    // foo might be a reference or null 
    if (null !== foo) { 
        // do things 
    } 
    

    솔직히 나는 왜 이것을하고 있는지 모르겠다. document.getElementById 메서드는 아무것도 찾을 수없는 경우 null을 반환합니다.

    나는 이것이 안티 패턴을 알고 있지만 실제로 사용합니까 :

    var myElmnt; 
    if ((myElmnt = document.getElementById('myId'))) 
    { 
        // do stuff with myElmnt 
    } 
    

    그래, 나도 알아, 내가 지옥과 모두 지속된다.

    +0

    좋은 답변 (+1). 나는 실제로 당신이 넣은 것처럼 [if ((myElmnt = document.getElementById ('myId'))) {..}] '반 패턴'을 좋아한다. 왜 그것은 반대 입장입니까? – Konrad

    +2

    일부 책에서는이 책을 읽었으며 비교 연산자 만이이 장소에서 표현으로 허용되어야한다는 논쟁이 있다고 생각합니다. 이렇게하면 코드를 스캔 할 때 오류를 더 쉽게 찾을 수 있으며 오류가 더 많이 발생할 수 있습니다. '= '를 쉽게 풀 수 있고 자바 스크립트는 응용 프로그램이 예상대로 작동하지 않는 이유에 대한 피드백을 제공하지 않고 삼킬 것입니다. 그러나 모든 것과 마찬가지로 : 당신이 무엇을하고 있는지를 안다면 ... – anddoutoi

    -2

    false 또는 아무것도 반환하지 않습니다. 당신이하고있는 경우 그냥 return은 널 (null) 역할을합니다 :

    foo = getReferenceToFoo('myID'); 
    if (foo) { 
        // do things 
    } 
    
    +1

    'return' 만 실제로'undefined'가되고'null'이 아닙니다. 그리고 우리 모두는 차이점이 있음을 알고 있습니다 (막연하지만 결코 그곳에있을 수는 없습니다). – anddoutoi

    1

    당신이 반환 뭔가하려는 경우, null의 매우 목적은, 음, 널 내용을 표시하기 때문에 나는, null를 돌려 것입니다.

    Wikipedia for Null

    :

    널 특별한 포인터 값 (또는 객체 참조 다른 종류) 오브젝트 포인터가 고의로 가리 키지 않는 것을 의미 (또는 참조)하기 위해 사용된다.

    그렇지 않으면 오류가 발생하면 정밀도 나 중단을 원할 경우 예외를 throw 할 수 있습니다.