아무도 여기에 대한 잠재력을 언급하지 NaN
않았습니다. 그래서 저는 2 센트를 더할 것이라고 생각했습니다.
주어진 코드의 경우 :
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
||
연산자 를 사용하는 경우 첫 번째 거짓이 아닌 값을 얻습니다.
var result = a || b || c || d || e || f; // result === 1
here 게시 된 일반적인 병합 방법을 사용하면 다음과 같은c
값을 얻습니다 .NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
이것들 중 어느 것도 나에게 옳지 않은 것 같습니다. 당신의 세계와 다를 수있는 나의 작은 합체 논리 세계에서, 나는 정의되지 않은, null, NaN을 모두 "무시한"것으로 간주합니다. 그래서 다시 돌아올 것으로 기대합니다d
통합 방법에서 0 .
누군가의 뇌가 내 것과 같이 작동하고을 제외하고 싶다면 NaN
이 방법으로 다음을 수행하십시오.
function coalesce() {
var i, undefined, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg !== null && arg !== undefined
&& (typeof arg !== 'number' || arg.toString() !== 'NaN') ) {
return arg;
}
}
return null;
}
코드를 최대한 짧게하고 명확성이 부족하지 않은 사람들을 위해 @impinball에서 제안한대로 사용할 수도 있습니다. 이것은 NaN이 NaN과 같지 않다는 사실을 이용합니다. 당신은 더 많은 것을 여기에서 읽을 수 있습니다 이유가 NaN NaN이 같지 않음?
function coalesce() {
var i, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg != null && arg === arg ) { //arg === arg is false for NaN
return arg;
}
}
return null;
}
x ?? y
구문은 이제 1 단계 제안 상태- 무효 병합