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.