2016-12-04 10 views
0

선택적 매개 변수에 대한 인수로 null을 전달해야합니까?Javascript 함수/메소드에서 선택적 매개 변수의 인수로 null을 전달해야합니까?

Model.find(conditions, [projection], [options], [callback]) 

// Example use 
// passing options and executing immediately 
MyModel.find({ name: /john/i }, null, { skip: 10 }, function (err, docs) {}); 

나는 성공적으로이 방법과 두 번째 인수로 null을 거치지 않고 다른 유사한 방법을 이용하고있다,하지만이 있는지 알고 싶습니다 : 나는 몽구스 문서에서 코드를 포함했다 예를 들어

길에서 나를 곤경에 빠지게 할거야?

몇 가지 관련 질문을 찾았지만 선택적 매개 변수와 관련이없는 것으로 보입니다. 어떤 통찰력이라도 대단히 감사합니다.

답변

2

를 사용할 수 있습니다.

예컨대이 기능을 가지고 : 그것은 예상

function repeat(value, times) { 
 
    if (arguments.length === 0) { 
 
    value = "Hello!"; 
 
    times = 2; 
 
    } else if (arguments.length === 1) { 
 
    if (typeof value === "number") { 
 
     times = value; 
 
     value = "Hello!"; 
 
    } else { 
 
     times = 2; 
 
    } 
 
    } 
 
    var output = ""; 
 
    for (var i = 0; i < times; i++) { 
 
    output += value + " "; 
 
    } 
 
    return output; 
 
} 
 

 
console.log(repeat()); 
 
console.log(repeat("Yo!")); 
 
console.log(repeat(5)); 
 
console.log(repeat("Yo Yo!", 3));

인수 (이 경우 하나의 문자열이 하나의 숫자이다) 충분히 상이한 것이보고 테스트 할 수 "second"인수가 제공된 경우에도 "first"인수가 생략 된 경우


제공 한 문서를 말한다 :

Model.find(conditions, [projection], [options], [callback]) 

마지막 세 가지 인수의 각

가 아니라 독립적으로 선택 표시됩니다, 당신이 그들 중 하나를 생략 할 수 있음을 시사하고 여전히 사람들이 제공하는 그 다음. 그것은 선택 사항입니다 나타 내기 위해 주위에

JSON.stringify(value[, replacer[, space]]) 

세 번째 인수가 []을 가지고 있지만 인수 주위 [] 내부 입니다 :

the MDN documentation for JSON.stringify에 비교. 즉, 두 번째 인수가 제공되는 경우에만 세 번째 인수를 지정할 수 있습니다.

+0

바로 그게 내가 찾고있는 것입니다. – Cheesus

+0

답변을 추가하면 ES6에서 구조적 제거를 사용하여'arguments' 호출을 피하고 코드를 좀 더 깔끔하게 정리할 수 있습니다. – GMaiolo

+0

투영 인수로 null을 전달하지 않으면 내 옵션 개체가 투영으로 해석되어 내 서버가 충돌하게되므로 생각할 부분이 확실하지 않습니다. – Cheesus

-1

당신은 쿼리 빌더 그것은 함수가 작성 방법에 따라 달라집니다

Model 
      .find({ name: /john/i }) 
      .skip(10) 
      .exec(callback) 
+0

, 그리고 내가 쿼리 빌더를 사용할 수 있습니다 알고 있지만, 내 질문에 난 만약 내가 널 지정해야하는지 여부에 대한 자세한 내용입니다 내가 사용하고있는 다른 선택적 매개 변수 앞에 오는 하나의 선택적 매개 변수를 생략했습니다. – Cheesus

0

Quentin의 답변이 정확합니다. 단지 ES6에서이를 덧붙이고 싶습니다. destructuring parameters으로 피할 수 있습니다.

내가 당신에게 예를 들어주지 : 나는 의견을 보내 주셔서 감사합니다

let str= "Something"; 
let num = 10; 

doSomething({ str, num }); 

function doSomething({ somethingElse, num, str }) { 
    /* the argument gets passed like 
    { 
     somethingElse: somethingElse, 
     num: num, 
     str: str 
    } 
    and if any value is missing then it is null, so you can check for 
    each property's existance easily 
    */ 
} 
+0

방금 ​​파괴적인 것에 대해 배웠지 만 아직 실제 사용을 관찰하지 못했습니다. 예를 들어 주셔서 감사합니다. – Cheesus

+0

사실, 당신이 요구했던 사용법은 정확한 사용법입니다. foo (null, null, null, null, null, "finallySomeValue")'를하지 않아도되는 가장 깨끗한 방법입니다 (비록 JS에 과부하가있는 것을 좋아한다. 파괴는 꽤 좋다.) ES6을 시도해보십시오.이 작은 것들이 때때로 유용 할 수 있습니다. – GMaiolo