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


101

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

function saveItem(andClose = false) {

}

Firefox에서 잘 작동합니다.

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

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

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


여기에 Android 스톡 브라우저 5.1.1, 동일한 문제가 있습니다.
jc

답변:


149

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

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

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

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

최신 정보

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

function setName(name = 'Bob') {}

14
이것은 ES6을 구현하지 않고 기본 매개 변수를 중단하는 IE11 이하에 유용합니다.
Eran Goldin

2
감사!! 몰랐어요! IE는 좋지 않지만 개발자는 "비"브라우저를 지원하는 것 외에 다른 선택의 여지가 없습니다.
Fr0zenFyr

4
name = name || 'Bob';이름이 falsey 값으로 설정되어있는 경우, 기본이 아닌 이름으로 사용되므로 사용하지 않아야합니다
제라드 심슨

8
대신 name = name || 'Bob'사용 name = (name === undefined) ? '' : name;
브라이언

1
@juco 이해가 안 돼요 "이거 할 수 없어요"-Mozilla MDN이 할 수 있다고 해요? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… IE에서 할 수 없다고 말하는 것입니까, 아니면 Mozilla 문서가 정확하지 않다는 것입니까?
php-b-grader

13

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

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


1
자, Javascript 함수에서 기본값을 설정하는 가장 좋은 방법은 무엇입니까?
Talon 2013 년

1
@Talon : 가장 좋은 방법은 상황에 따라 다릅니다. 주장이 거짓이 아니라는 것을 알고 있다면 할 수 있습니다 foo = foo || "the default". 또는 물체 .length의 확인 이 가능 arguments합니다. 또는 각 매개 변수를 간단히 테스트 할 수 있습니다 undefined. 각각 사용하는 경우가 다릅니다.
시스템은

8

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

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

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
    }
}

1
그것은 andClose거짓으로 설정 될 것입니다. 그것은 0이었습니다 ... 제가 기대했던
것과는 다릅니다

@gdoron은 이것을 참조하십시오 : stackoverflow.com/questions/7615214/… 이것들은 당신이 사용하는 언어에 대해 배우는 데 필요한 기이 한 것들입니다.
JRomero 2013 년

대안은 세 번째 줄을 var andClose = andClose === undefined? false: andClose;That 로 변경하는 것입니다. 그러면 0함수 에 전달할 수 있고 false.
Max Heiber 2015

2

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

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

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


0

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

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

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


한 가지 사소한 조정은 andClose변수가 이미이 범위에 할당 되었기 때문에 var 선언을 제거하는 것입니다
Ben Sewards
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.