반응형

JavaScript 기능의 기본 매개 변수 값을 설정합니다


질문

 

JavaScript 함수가 기본값을 설정하는 선택적 인수를 갖고 값이 정의되지 않은 경우에 사용되지 않고 값이 전달되면 무시됩니다.루비에서는 이렇게 할 수 있습니다.

def read_file(file, delete_after = false)
  # code
end

자바 스크립트 에서이 작업을 수행합니까?

function read_file(file, delete_after = false) {
  // Code
}

답변

 

ES6 / ES2015에서 기본 매개 변수는 언어 사양에 있습니다.

function read_file(file, delete_after = false) {
  // Code
}

그냥 작동합니다.

참조 : 기본 매개 변수 - MDN.

기본 함수 매개 변수는 가치 또는 정의되지 않은 값이 없으면 기본값으로 공식 매개 변수를 기본값으로 초기화 할 수 있습니다.

파괴를 통해 기본 이름 지정된 매개 변수를 시뮬레이션 할 수도 있습니다.

// the `= {}` below lets you call the function without any parameters
function myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
    // Use the variables `start`, `end` and `step` here
    ···
}

Pre ES2015,

많은 방법이 있지만, 이것은 내가 선호하는 방법이기 때문에, 당신이 원하는 모든 것, 당신이 원하는 모든 것에, 당신이 원하는 모든 것을 상기 할 수 있습니다.(NULL == "OBJECT"))

function foo(a, b) {
  a = typeof a !== 'undefined' ? a : 42;
  b = typeof b !== 'undefined' ? b : 'default_b';
  ...
}


답변

function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

이는 DELETE_AFTER의 값을 DELETE_AFTER에 지정합니다. 그렇지 않으면 캔트 _AFTER의 값이 그렇지 않으면 "내 기본값"문자열을 할당합니다.더 자세한 내용은 Doug Crockford의 언어 조사를 확인하고 운영자 섹션을 확인하십시오.

이 접근법은 FALES 값 I.E.E.E.E. FALSE, NULL, UNUTEFINED, 0 또는 ""을 전달하려는 경우 작동하지 않습니다.당신이 통과 할 거짓된 가치가 필요한 경우 Tom Ritter의 답변에서 메소드를 사용해야합니다.

기능에 대한 여러 매개 변수를 다룰 때 소비자가 객체에 매개 변수 인수를 전달 한 다음 이러한 값을 함수의 기본값이 포함 된 객체와 병합하는 것이 종종 있습니다.

function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

쓰다

// will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 


답변

나는 이것을 훨씬 더 간결하고 개인적으로 읽을 수있는 것처럼 간단한 것을 발견합니다.

function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
} 


답변

대답은 예입니다.실제로 기본 매개 변수를 지원하는 많은 언어가 있습니다.파이썬은 그 중 하나입니다 :

def(a, enter="Hello"):
   print(a+enter)

괄호로 인한 파이썬 3 코드이지만 함수의 기본 매개 변수는 JS에서 작동합니다.

예를 들어, 귀하의 경우 :

함수 READ_FILE (file, deleteafter = false) { console.log (삭제됨); } READ_FILE ( "test.txt");

그러나 때로는 기본 매개 변수가 필요하지 않습니다.

다음과 같이 함수 시작 직후의 변수를 정의 할 수 있습니다.

함수 READ_FILE (파일) { var delexeAfter = false; console.log (삭제됨); } READ_FILE ( "test.txt");

내 예 모두에서 모두 동일한 것을 반환합니다.그러나 때로는 실제로 실제로 매우 고급 프로젝트처럼 유용 할 수 있습니다.

따라서 결론적으로 기본 매개 변수 값은 JS에서 사용할 수 있습니다.그러나 함수 시작 직후 변수를 정의하는 것과 거의 동일한 것입니다.그러나 때로는 여전히 매우 유용합니다.알아 낼 수 있듯이 기본 매개 변수 값은 함수 시작 직후의 매개 변수를 정의하는 표준 방식보다 1 줄이 된 표준 방식보다 1 줄입니다.

편집 : 그리고 이것은 중요합니다.이것은 IE에서 작동하지 않습니다.문서를 참조하십시오.따라서 IE로 "기능 맨 위에있는 변수 정의"방법을 사용해야합니다.기본 매개 변수는 IE에서 작동하지 않습니다.



답변

ES6 +를 사용하는 경우 다음과 같은 방법으로 기본 매개 변수를 설정할 수 있습니다.

기능 테스트 (foo = 1, bar = 2) { console.log (foo, bar); } 테스트 (5);// foo 덮어 쓰기, 막대는 기본 매개 변수로 유지됩니다

ES5 구문이 필요한 경우 다음과 같은 방법으로 수행 할 수 있습니다.

기능 테스트 (Foo, Bar) { foo = foo ||2; 바 = 바 ||0; console.log (foo, bar); } 테스트 (5);// foo 덮어 쓰기, 막대는 기본 매개 변수로 유지됩니다

위의 구문에서 또는 연산자가 사용됩니다.또는 오퍼레이터는 항상 오른손 사이드 값을 반환하지 않으면 true로 변환 할 수있는 경우 항상 첫 번째 값을 반환합니다.해당 인수가없는 함수가 호출되면 매개 변수 변수 (예제의 막대)는 JS 엔진에서 정의되지 않은 것으로 설정된 것으로 설정됩니다.정의되지 않은 것은 그런 다음 정의되지 않음을 false로 변환하므로 또는 연산자가 값 0을 반환합니다.



답변

그 솔루션은 JS에서 나에게 작동합니다.

function read_file(file, delete_after) {
    delete_after = delete_after || false;
    // Code
}
출처:https://stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function
반응형