JavaScript 함수에 기본값을 설정하는 선택적 인수를 사용하여 값이 정의되지 않은 경우 사용되며 값이 전달되면 무시됩니다. 루비에서는 다음과 같이 할 수 있습니다 :
def read_file(file, delete_after = false)
# code
end
이것은 JavaScript에서 작동합니까?
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
···
}
사전 ES2015 ,
여러 가지 방법이 있지만 이것이 내가 선호하는 방법입니다. false 또는 null을 포함하여 원하는 것을 전달할 수 있습니다. ( 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
}
이것은 false 값 이 아닌 경우 delete_after
값에 할당하고 그렇지 않으면 문자열을 할당합니다 . 자세한 내용은 Doug Crockford의 언어 설문 조사를 확인하고 운영자 섹션을 확인하십시오 .delete_after
"my default here"
당신이 전달하려는 경우이 방법은 작동하지 않습니다 falsey의 예 값 false
, null
, undefined
, 0
또는 ""
. 당신이 필요한 경우 falsey 당신에 전달 될 값의 방법을 사용해야합니다 톰 리터의 답변을 .
함수에 대한 많은 매개 변수를 처리 할 때 소비자가 개체의 매개 변수 인수를 전달한 다음 이 값을 함수의 기본값이 포함 된 개체와 병합 하는 것이 유용한 경우가 종종 있습니다.
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');
}
답변
ECMAScript 6에서는 실제로 가지고있는 것을 정확하게 작성할 수 있습니다.
function read_file(file, delete_after = false) {
// Code
}
존재하지 않는 경우 또는로 설정 delete_after
됩니다 . 오늘날 이와 같은 ES6 기능을 Babel 과 같은 변환기로 사용할 수 있습니다 .false
undefined
답변
기본 매개 변수 값
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
왜? 때문에 0 is falsy
, 그리고, 그래서 x || 11 results in 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
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`
x = 11
함수 선언 x !== undefined ? x : 11
에서 훨씬 더 일반적인 관용구보다 더x || 11
기본값 표현식
Function
기본값은 31과 같은 단순한 값 이상일 수 있습니다. 유효한 표현 일 수 있습니다 function call
.
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
보시다시피, 기본값 표현식은 느리게 평가됩니다. 즉, 필요한 경우 및 필요할 때, 즉 매개 변수의 인수가 생략되거나 정의되지 않은 경우에만 실행됩니다.
기본값 표현식은 인라인 함수 표현식 호출 일 수도 있습니다 (일반적으로 즉시 호출 된 함수 표현식이라고 함) (IIFE)
.
function foo( x =
(function(v){ return v + 11; })( 31 )
) {
console.log( x );
}
foo(); // 42
답변
그 솔루션은 js에서 저에게 효과적입니다.
function read_file(file, delete_after) {
delete_after = delete_after || false;
// Code
}
답변
undefined와 명시 적 비교를 사용하십시오.
function read_file(file, delete_after)
{
if(delete_after === undefined) { delete_after = false; }
}