ここでは、の可能性について誰も言及し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
ここに掲載されている一般的な合体方法を使用すると、次c
の値を持つが得られます。NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
これらのどちらも私には正しくないようです。あなた自身の世界とは異なる可能性のある合体ロジックの私自身の小さな世界では、未定義、null、およびNaNはすべて「nullっぽい」と見なします。したがって、d
合体メソッドから(ゼロに)戻ることを期待します。
誰かの脳が私のように機能し、を除外したい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のプロポーザルステータスにあります- 無効な合体