[javascript] Javascript 함수 및 기본 매개 변수, IE 및 Chrome에서 작동하지 않음

다음과 같은 함수를 만들었습니다.

function saveItem(andClose = false) {

}

Firefox에서 잘 작동합니다.

IE에서는 콘솔에 다음 오류가 발생합니다.
Expected ')'

Chrome에서는 콘솔에 다음 오류가 표시됩니다.
Uncaught SyntaxError: Unexpected token =

두 브라우저 모두 오류의 원인을 함수 생성 줄로 표시합니다.



답변

이 작업을 수행 할 수는 없지만 대신 다음과 같은 작업을 수행 할 수 있습니다.

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}

이것은 종종 다음과 같이 축약됩니다.

function setName(name) {
  name = name || 'Bob';
}

최신 정보

위의 내용은 ECMAScript <= 5에 해당됩니다. ES6는 기본 매개 변수 를 제안했습니다 . 따라서 위의 내용은 다음과 같이 읽을 수 있습니다.

function setName(name = 'Bob') {}


답변

이것은 유효한 ECMAScript 구문은 아니지만 언어 구현에 추가하는 Mozilla의 상위 기능 집합에 대한 유효한 구문입니다.

기본 매개 변수 할당 구문은 ECMAScript 6에서 제공 것입니다.


답변

자바 스크립트는 “기본”지정자를 허용하지 않습니다.

원하는 작업을 빠르게 수행하는 방법은 다음과 같습니다.

function saveItem(andClose = false) {

}

다음에 :

function saveItem(andClose) {
    // this line will check if the argument is undefined, null, or false
    // if so set it to false, otherwise set it to it's original value
    var andClose = andClose || false;

    // now you can safely use andClose
    if (andClose) {
        // do something
    }
}


답변

제공 한 코드는 Chrome <버전 49에서 실행되지 않습니다 :
https://kangax.github.io/compat-table/es6/#test-default_function_parameters

유효한 ECMAScript 2015 구문을 사용했습니다.

제 생각에 ES2015 기능을 사용하는 가장 좋은 방법은 Babel 을 사용하여 ES2015를 ES5로 트랜스 컴파일 하는 단계와 함께 Browserify 또는 WebPack에 자산을 번들링 하는 것입니다 . 그러면 ES2015 브라우저 호환성 차트에 대해 걱정할 필요가 없습니다. 처음 시작하는 것은 고통 스럽지만 그만한 가치가 있습니다.


답변

귀하의 경우 변수가 부울인지 확인하는 다른 대안이 있습니다.

function saveItem(andClose) {
  var andClose = true == andClose;
  // ...
}

기본값은 undefined, 및 true == undefined=> false이므로 기본값은 false:)입니다.


답변