2016-10-06 6 views
0

私の関数には以下のコードがありますが、変数newValueに値を代入したいと思います。ここでJavaのOR文で0とnullを区別する

var newValue = fieldValue || originalValue || masterValue;

私はoriginalValue = 0を持っている場合は、Javaスクリプトが偽/ヌルとして扱い、newValueににmasterValueを割り当てます。 代わりにoriginalValue(0)をnewValueに割り当てたいとします。

追加コードなしでこれを達成する方法はありますか?

+3

どんな偽の価値ですか? – adeneo

+0

実際にはnullとfalseの両方のために、0をチェックしたくないだけです。 –

+0

次に、追加のコードなしでそれを行う方法はありません。同じコードにそのコードを置くかどうかはあなた次第です。 – adeneo

答えて

1

はい、少し複雑になります(の3進演算子を使用)。

var newValue = fieldValue || (originalValue || originalValue===0) ? originalValue : masterValue; 

これは場合でもfieldValueに割り当てることが0にしたいと仮定し)

+1

これで、 'false ||偽== 0'とあなたが得るものを見る*(ヒント:あなたは厳密な比較が必要です)*? – adeneo

+0

実際には、元の値だけにあります。 –

+0

@ Y.Solankiが更新されました。(*オリジナルのみの場合は*、@adenaoコメントの場合は*) –

0

あなたは||オペレータがかなりずさんであるといけない

var newValue = fieldValue; 
if (newValue == null) 
    newVAlue = originalValue; 
if (newValue == null) 
    newValue = masterValue; 

を使用したいと思います偽の値に対処する必要があるときに使用してください。

1

述語で「良い」値を定義し、Array.find関数に渡し:

var isValid = x => !!x || x === 0; 
var newValue = [fieldValue, originalValue, masterValue].find(isValid); 

古いMSIEsをターゲットにする場合、.find.filter(...)[0]に置き換えることができます。

var isValid = x => !!x || x === 0; 
 

 
console.log([1, 2, 3].find(isValid)); 
 
console.log([false, 0, 3].find(isValid)); 
 
console.log([null, 0, 3].find(isValid)); 
 
console.log([undefined, 0, 3].find(isValid)); 
 
console.log(["", 0, false].find(isValid)); 
 
console.log(["", null, false].find(isValid));

+0

niceですが、コメントには、0は「originalValue」変数に対してのみ有効であることがOPに記述されています。 –

0

あなたは、これは、ここで1行のコードで作業を取得したい場合はオプションです:あなただけではない、その後 `null`なのでために特別にチェックしたい、と

var fieldValue = false; 
var originalValue = 0; 
var masterValue = 5; 

var newValue = fieldValue || (originalValue===0)?0:originalValue || masterValue; 

console.log(newValue); // newValue=0 
関連する問題