短絡評価は、最初の値が偽であるかどうかを判断します。その場合は、次のように、第2の値を返す:短絡評価でゼロ値を許可する
var x = y || z; // if y is falsey return z
は、if/else文または三元事業者に頼ることなく短絡評価を使用した場合falseyあるとして、ゼロの値を無視することがある方法ですか?
短絡評価は、最初の値が偽であるかどうかを判断します。その場合は、次のように、第2の値を返す:短絡評価でゼロ値を許可する
var x = y || z; // if y is falsey return z
は、if/else文または三元事業者に頼ることなく短絡評価を使用した場合falseyあるとして、ゼロの値を無視することがある方法ですか?
Numberオブジェクトに数値をラップして、それをチェックすることができます。
var x = new Number(0) || console.log("never gets printed");
console.log(parseInt(x));
//or
console.log(x.valueOf());
EDIT:
var x1 = Number(y===0 && '0' || y || z)
// or
var x2 = (y===0 && '0' || y || z)-0
var z = -1;
var y = 42;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
var y = 0;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
var y = null;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
z
が数値である場合は、多分、このようなトリックを使用することができます
オリジナルの答え:
たぶん簡単な方法は(3当量)
var x = (y === 0) ? 0 : (y || z);
var x = (!y && y!==0) ? z : y;
var z = 'Was falsey';
var y = 42;
var x = y || z;
var x1 = (y === 0) ? 0 : (y || z);
var x2 = (!y && y!==0) ? z : y;
console.log('x:',x, 'x1:',x1, 'x2:',x2);
var y = 0;
var x = y || z;
var x1 = (y === 0) ? 0 : (y || z);
var x2 = (!y && y!==0) ? z : y;
console.log('x:',x, 'x1:',x1, 'x2:',x2);
var y = null;
var x = y || z;
var x1 = (y === 0) ? 0 : (y || z);
var x2 = (!y && y!==0) ? z : y;
console.log('x:',x, 'x1:',x1, 'x2:',x2);
Opは三項を言っていません – user7951676
ああ、三元無しでサンプルを追加! – NatNgs
編集作業することができます:これは三項演算子を使用して、そこらそれがあなたのものではないなら、探して、これを使用しないでください。もちろん
が、これはそれを行うには、別の簡単な方法です:y
がtruthyある
var x = y || y==0?0:z;
場合なら、
x
はy
に設定されている
y
はfalsyあり、その後、y==0
、x
0
y
が偽であり、y!=0
の場合、x
はz
に設定されます。
'? : '三位一体?彼は、もしかしたら、三分の一を使わずに言った。 –
@JaykumarGondaliya真実...しかし、これを行う方法は非常に少ない。 – clabe45
あなたはy
がゼロに等しくない場合は、最初のチェックと数値を取り、y
ためz
のデフォルトの結果を得ることができます。
x = +(y !== 0) && (y || z)
どのように動作する
:
expression y part result result comment ---------------------- --------- ----------- ------ ---------------------------- +(y !== 0) && (y || z) complete expression +(y !== 0) 0 0 0 result found, omit next part because of falsy value +(y !== 0) 1 1 check next part 1 && (y || z) y y take y, omit default +(y !== 0) undefined 1 check next part 1 && (y || z) z z take z as default
function x(y, z) {
return +(y !== 0) && (y || z);
}
console.log(x(0, 42)); // 0
console.log(x(4, 42)); // 4
console.log(x(undefined, 42)); // 42
console.log(x(0, null)); // 0
console.log(x(4, null)); // 4
console.log(x(undefined, null)); // null
console.log(x(0, 0)); // 0
console.log(x(4, 0)); // 4
console.log(x(undefined, 0)); // 0
.as-console-wrapper { max-height: 100% !important; top: 0; }
はそうは思わないでください。 –