Burada kimse NaN
benim için de bir sıfır-değer değeri olan potansiyelden bahsetmedi . İki sentimi de ekleyeceğimi düşündüm.
Verilen kod için:
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
||
İşleci kullanacak olsaydınız, ilk yanlış olmayan değeri alırsınız:
var result = a || b || c || d || e || f; // result === 1
Burada yayınlanan tipik birleştirme yöntemini kullanırsanız c
, aşağıdaki değere sahip olacaksınız :NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
Bunların hiçbiri benim için doğru görünmüyor. Dünyanızdan farklı olabilecek kendi küçük birleşme mantığı dünyamda, tanımsız, null ve NaN'yi "null-ish" olarak görüyorum. Yani, d
birleştirme yönteminden (sıfır) geri almak için beklenir .
Birinin beyni benim gibi çalışıyorsa ve dışlamak istiyorsanız NaN
, bu yöntem bunu başaracaktır:
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;
}
Kodu olabildiğince kısa yapmak ve biraz netlik eksikliği umursamayanlar için bunu @impinball tarafından önerilen şekilde kullanabilirsiniz. Bu, NaN'nin asla NaN'ye eşit olmaması gerçeğinden yararlanır. Burada daha fazla bilgi edinebilirsiniz: NaN neden NaN'ye eşit değil?
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
sözdizimi şimdi 1. aşama teklif durumunda - nullish birleştirme