JavaScript 함수에 기본값을 설정한 선택적 인수가 있는데, 이 인수는 값이 정의되지 않은 경우 사용되며(값이 전달되면 무시됩니다). Ruby에서는 다음과 같이 할 수 있습니다:
def read_file(file, delete_after = false)
# code
end
자바스크립트에서도 작동하나요?
function read_file(file, delete_after = false) {
// Code
}
ES6/ES2015]1부터 기본 매개변수는 언어 사양에 있습니다.
function read_file(file, delete_after = false) {
// Code
}
그냥 작동합니다.
참조: 기본 매개변수 - MDN
기본 함수 파라미터는 값 없음 또는 정의되지 않음이 전달될 경우 공식 파라미터를 기본값으로 초기화할 수 있도록 합니다.
디스트럭처링을 통해 기본 명명된 파라미터를 시뮬레이션할 수도 있습니다](http://exploringjs.com/es6/ch_parameter-handling.html#sec_named-parameters):
// 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
···
}
ES2015 이전,
여러 가지 방법이 있지만, 제가 선호하는 방법은 다음과 같습니다. 거짓이나 널을 포함하여 원하는 모든 것을 전달할 수 있습니다. (typeof 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
의 값이 falsey 값이 아닌 경우 delete_after
에 값을 할당하고, 그렇지 않으면 문자열 "내 기본값은 여기"
를 할당합니다. 자세한 내용은 [Doug Crockford의 언어 설문조사]와 연산자 섹션1을 참조하세요.
이 접근 방식은 false
, null
, 정의되지 않음
, 0
또는 &
&`와 같은 falsey 값을 전달하려는 경우에는 작동하지 않습니다. 만약 falsey 값을 전달해야 한다면 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" });
Ecmascript 6 에서 실제로 너희는너희가 %s/dbase/ext_table. 당근이지를 기록할 수 있어야 합니다.
function read_file(file, delete_after = false) {
// Code
}
이 설정은 존재하지 않거나 's' 를 '거짓' 'delete_after 경우 정의되지 않은'. 이와 같은 기능을 함께 사용할 수 있습니다 오늘 같은 ES6 트란스필레르스 바벨.
Es6, 할 수 있는 것 중 가장 흔한 JavaScript 에서 설정할 필요가 함수에 대해 '매우' 관련시킵니다 기본값입니다 매개변수입니다. 몇 년 동안 이런 일을 까지하네 운행에서어떠한 꽤 잘 살펴봐야 한다.
function foo(x,y) {
x = x || 11;
y = y || 31;
console.log( x + y );
}
foo(); // 42
foo( 5, 6 ); // 11
foo( 5 ); // 36
foo( null, 6 ); // 17
이 패턴은 가장 많이 사용하는 것이 아니라 하나님이 전달하십시오 같은 값을 불안하다고요
foo(0, 42)
foo( 0, 42 ); // 53 <-- Oops, not 42
왜? 그래서 'x', '파우시 때문에 0 이 아닌' 11 결과 11 직접 전달된 0. 이 문제를 해결하려면 다음과 같은 사람들이 더 자세하게 확인란 기록하십시오 대신 잡았다
function foo(x,y) {
x = (x !== undefined) ? x : 11;
y = (y !== undefined) ? y : 31;
console.log( x + y );
}
foo( 0, 42 ); // 42
foo( undefined, 6 ); // 17
이제 좋은 도움됐네 구문을 추가한 vmware. 합리화하고록 지정 '검사' ES6 기본값과 없는 인수만:
function foo(x = 11, y = 31) {
console.log( x + y );
}
foo(); // 42
foo( 5, 6 ); // 11
foo( 0, 42 ); // 42
foo( 5 ); // 36
foo( 5, undefined ); // 36 <-- `undefined` is missing
foo( 5, null ); // 5 <-- null coerces to `0`
foo( undefined, 6 ); // 17 <-- `undefined` is missing
foo( null, 6 ); // 6 <-- null coerces to `0`
'11' 의 'x 는 x = 비슷하게 함수 선언을! = 정의되지 않은? x: 'x' 11 '에 비해 훨씬 더 일반적인 관용구 11
'함수' 이상이 될 수 있는 단순한 기본값과 같은 값을 31. 수 있으며, 심지어 '유효한 표현식에서는 함수 호출':
function bar(val) {
console.log( "bar called!" );
return y + val;
}
function foo(x = y + 3, z = bar( x )) {
console.log( x, z );
}
var y = 5;
foo(); // "bar called"
// 8 13
foo( 10 ); // "bar called"
// 10 15
y = 6;
foo( undefined, 10 ); // 9 10
보시다시피, 그들은 이제 불과 실행하십시오 마무리라뇨 기본값입니다 표현식은 평가하실 게으름을 경우 즉, 필요에 따라 때 주장은 매개변수입니다 누락 또는 정의되지 않았습니다.
인라인 함수 호출을 받을 수도 있습니다 한 기본값입니다 표현식에서는 표현식에서는 흔히 ':' (인생) 호출되었을 함수은 표현식에서는 충족되었으며 즉시 -
function foo( x =
(function(v){ return v + 11; })( 31 )
) {
console.log( x );
}
foo(); // 42
function f (x, y = 7, z = 42) {
return x + y + z
}
f(1) === 50
Tpc. 참조됨 - [http://es6-features.org/ # 데포스파람터발 주] [1]
[1]: http://es6-features.org/ # 데포스파람터발 주
극도의 javascript 에 기본 매개 변수 값을 사용할 때 꼭 이래야겠어요 것을 권장합니다. 흔히 포리치 ',' 높은 '같은 기능을 함께 사용할 때 버그를 창출합니다 주문하십시오 매핑해야' 및 '감소'. 예를 들어, 이 계열의 코드:
['1', '2', '3'].map(parseInt); // [1, NaN, NaN]
페르세인트 (가) '기능을 선택적으로 두번째 페르세인트 (s, [ 기수' '= 10])' 3 '와' 페르세인트 매핑해야 하지만 페이징됩니다 인수만: (element, index 및 array).
난 당신의 소중한 인수만 필요한 기본 옵션 / 양식 매개변수입니다 제안하세요 구분할 수 있습니다. 1.2 는 필요 없는 경우, 또는 3 함수은 매개변수입니다 기본값입니다 할 때, 모든 함수에 대한 이해가 됩니다 위치 매개변수입니다 옵션임 매개변수입니다 단일 개체의 속성을 지정된 따라야 합니다. 따라서 4 개 이상 걸리는 경우, 아마도 더 많은 기능을 모두 공급할 수 있는 단일 개체의 속성을 통해 감지에서 인수만 매개변수입니다.
네 경우엔 꼭 이래야겠어요 데르테피레 다음과 같은 함수를 작성하는 것이 좋습니다 ( '대신' & # 39 의 편집됩니다 당 주석).
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
// unsafe
function read_file(fileName, deleteAfter=false) {
if (deleteAfter) {
console.log(`Reading and then deleting ${fileName}`);
} else {
console.log(`Just reading ${fileName}`);
}
}
// better
function readFile(fileName, options) {
const deleteAfter = !!(options && options.deleteAfter === true);
read_file(fileName, deleteAfter);
}
console.log('unsafe...');
['log1.txt', 'log2.txt', 'log3.txt'].map(read_file);
console.log('better...');
['log1.txt', 'log2.txt', 'log3.txt'].map(readFile);
끝 - < 스니핏 >;!
위의 스니핏 뒤에 숨어 있는 위험을 보여주고 실행하는 기본 인수 값의 비사용률 매개변수입니다.
오랜 기간 중인 c++컴파일러는 개발자 (신인 웹 개발:)) 에서 처음 왔을 때 내가 정말 매개변수입니다 할당에서는 함수 정의, 이러한 상황에 대해 언급한 것과 같은 질문에 다음과 같습니다.
function myfunc(a,b=10)
하지만 단순하게 작동하는 것이 두려워 doesn& # 39, 일관되게 브라우저. 크롬 on my 데스크탑입니다 작동하지 않았다 협력했습니다 가져다줄래요 it 에 대한 크롬 안드로이드. 위에서 언급한 것은 안전한 옵션을 많아 -
function myfunc(a,b)
{
if (typeof(b)==='undefined') b = 10;
......
}
이 같은 뜻을 이미 밝힌 바 있지만, 다른 사람들의 반복하려면 답이 없는 것을 알려줄 수 있는 솔루션을 매개변수입니다 할당에서는 함수 정의 don& 의존하고 있지만, 이 t # 39 브라우저에 따라 작동할 수 있다.
마이크로소프트 엣지 있어 관심이 있는 사람에게 좁히어 코드를 사용하지 않으면 함수 작업하십시오 설정값으로 매개변수입니다.
function read_file(file, delete_after = false) {
#code
}
예를 들어, & # 39 는 오류를 발생시킬 수 있는 모서리까지 " 검색되어야;) & # 39 ";
이를 해결하기 위해 사용
function read_file(file, delete_after) {
if(delete_after == undefined)
{
delete_after = false;
}
#code
}
08일 8월 2016년 기준으로 이 문제가 여전히
function helloWorld(name, symbol = '!!!') {
name = name || 'worlds';
console.log('hello ' + name + symbol);
}
helloWorld(); // hello worlds!!!
helloWorld('john'); // hello john!!!
helloWorld('john', '(>.<)'); // hello john(>.<)
helloWorld('john', undefined); // hello john!!!
helloWorld(undefined, undefined); // hello worlds!!!
_
function foo (param1, param2) {
param1 = arguments.length >= 1 ? param1 : "default1";
param2 = arguments.length >= 2 ? param2 : "default2";
}
이 스케쳐내 최신값 ECMA6 문법을 사용할 수 있는 ''
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
function myFunction(someValue = "This is DEFAULT!") {
console.log("someValue --> ", someValue);
}
myFunction("Not A default value") // calling the function without default value
myFunction() // calling the function with default value
끝 - < 스니핏 >;!
이것의 이름은 ['기본 기능 매개변수입니다'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters). 공식 매개변수입니다 초기화되어야 수 없는 경우 정의되지 않은 값이거나 기본값과 함께 있게 된다.
참고 *: 이 브라우저는 인터넷 익스플로러 이상 작동합니까 못함.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
function myFunction(someValue) {
someValue = (someValue === undefined) ? "This is DEFAULT!" : someValue;
console.log("someValue --> ", someValue);
}
myFunction("Not A default value") // calling the function without default value
myFunction() // calling the function with default value
끝 - < 스니핏 >;!
이러한 예는 두 기능이 모두 동일한 비헤이비어를 별로 신뢰할 수 있는 것은 정의되지 않은 '가치' &prs. 변수는 없을 경우 해당 기능을 호출할 때 매개변수입니다 통과되었다.
function read_file(file, delete_after = false) {
// Code
}
또는
const read_file = (file, delete_after = false) => {
// Code
}
하지만 이 작업을 쉽게 수행할 수 있는 ES5 전에.
function read_file(file, delete_after) {
var df = delete_after || false;
// Code
}
즉, 두 번째 값을 사용할 경우 이 값은 그 값을 사용하여, 그렇지 않으면 높여줍니까 있는 작업 후 '' 같은 것입니다.
'기본' ES6+ 사용할 경우 다음과 같은 방법으로 매개 변수를 설정할 수 있습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >.
function test (foo = 1, bar = 2) {
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
끝 - < 스니핏 >;!
필요한 경우 'ES5' 구문을 다음과 같은 방법으로 할 수 있습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
function test(foo, bar) {
foo = foo || 2;
bar = bar || 0;
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
끝 - < 스니핏 >;!
이 '또는' 위 구문을 작동자 사용됩니다. 이 경우 항상 첫 번째 값을 되돌려줍니다 작동자 '또는' 이 'true' 이 아닌 경우 값을 라이트한드사이드 되돌려줍니다 변환할 수 있다. 이 매개 변수는 함수가 호출될 때 .해당 없이 인수 ('표시줄에는' 의 예) '로 설정되었습니다 정의되지 않은' 로 JS 엔진. 정의되지 않은 '는' 다음 '또는' 로 거짓값 및 카타시안 높여줍니까 작동자 값을 되돌려줍니다 0.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
function throwIfNoValue() {
throw new Error('Missing argument');
}
function foo(argValue = throwIfNoValue()) {
return argValue ;
}
끝 - < 스니핏 >;!
여기서 함수 () 는 foo 라는 디스크입니다. diskid 매개변수입니다 아리발루. 그럼 여기 트로이프노바루이 전달하십시오 못한다면 결국 아무것도 함수 호출 함수를 호출할 () 가 유일한 인수 및 반환되었습니다 결과: 배정됩니다 아리발루. 이것은 함수 호출 기본 매개변수입니다 어떻게 활용될 수 있다. 간단한 코드를 읽을 수 있도록 하는 및.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var fn = function(a, b) {
a = _.defaultTo(a, 'Hi')
b = _.defaultTo(b, 'Mom!')
console.log(a, b)
}
fn() // Hi Mom!
fn(undefined, null) // Hi Mom!
fn(NaN, NaN) // Hi Mom!
fn(1) // 1 "Mom!"
fn(null, 2) // Hi 2
fn(false, false) // false false
fn(0, 2) // 0 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
끝 - < 스니핏 >;!
이 경우 기본 설정 또는 , 현재 난 널 (null 값이 정의되지 않은
[2]: https://lodash.com/docs/4.17.10 # 데포토
그래 이 기본 매개변수입니다 피쳐라고 합니다
기본 함수가 매개변수를 사용하여 초기화되어야 수 없는 경우 공식 매개변수입니다 기본값과 함께 값이거나 정의되지 않은 된다.
문법:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
그러나 기본 기능에 매개변수입니다 정의되지 않은 상황에서는 다른 기본값입니다 설정한 것이 유용할 수 있습니다. 여기서 기본 매개변수입니다 도움이 될 수 있습니다.
과거에는 일반 전략 설정값으로 테스트하려면 매개 변수 값을 설정하는 것은 본문에 함수 값을 지정할 경우 정의되지 않았습니다. 가치 없는 경우, 그 값이 정의되지 않은 약간만이라도 호츨 나와 있습니다. 조건부 확인하십시오 파라메트가 정의되지 않은 것은 설정해야 할 것입니다
기본 매개변수입니다 ES2015 함께 있는 이 함수 본문 체크인합니다 필요하지 않습니다. 이제 간단히 말해 기본 값으로 함수은 헤드입니다.
차이를 들 수 있다.
// OLD METHOD
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
// NEW METHOD
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
패딩 정의되지 않은 vs 다른 파우시 값:
설령 값이 명시적으로 설정되었습니다 호출할 때 가치가 num 인수 기본값입니다 하나.
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(''); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
평가하실 dell. 매입옵션 시간:
일부 다른 언어에서는 달리 시간을 얻을 수 있기 때문에 인수 기본값입니다 평가하실 dell. 호출하십시오 함수가 호출될 때마다 새로운 개체가 만들어집니다.
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
// This even applies to functions and variables
function callSomething(thing = something()) {
return thing;
}
function something() {
return 'sth';
}
callSomething(); //sth
기본값 매계변수 기본 매개변수입니다 나중에 사용할 수 있습니다.
나중에 사용할 수 있는 기본 매개변수입니다 params 이미 발생했습니다.
function singularAutoPlural(singular, plural = singular + 's',
rallyingCry = plural + ' ATTACK!!!') {
return [singular, plural, rallyingCry];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
기능ᆞ기술과 인사이드라면 정의된 함수 본문:
게코 도입된 33 (Firefox 33 / 선더버드 33 / 시몽키 2.30). 던질 수 있는 기본 매개 변수와 함수 본문에 선언된 함수 내에서 참조될 레프랑스에로 (현재 TypeError 스피드먼키 http://schmidt. devlib. 있는 버그 1022967). 항상 먼저 함수 선언은 함수 내에 기본 매개변수입니다 csetup 바디입니다 평가하십시오 된다.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
이후 매개변수입니다 설정값으로 없이 기본 매개변수입니다:
이에 앞서 게코 26 (Firefox / / / 파이어폭스 OS 1.2 선더버드 26ppm 26ppm 시몽키 2.23), 다음 코드는 초래했다는 SyntaxError. 이 문제는 해결된 이후 버전에서 버그 777060 및 정상적으로 작동합니다. 왼쪽에서 오른쪽으로 계속 설정할 매개변수입니다 덮어쓰므로 기본값 매계변수 있어도 않고 나중에 매개변수입니다 설정값으로.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
탈구 파라메트 기본값과 함께 할당에서는:
함께 할당에서는 기본값입니다 데스트루스튜링 할당에서는 표기법을 사용할 수 있습니다.
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6