2017-08-23 4 views
7

शॉर्ट-सर्किट मूल्यांकन निर्धारित करता है कि पहला मान गलत है या नहीं। यदि हां, तो दूसरी मान, इस प्रकार है:शॉर्ट-सर्किट मूल्यांकन में शून्य-मान की अनुमति दें

var x = y || z; // if y is falsey return z 

वहाँ का सहारा के बिना शॉर्ट सर्किट मूल्यांकन का उपयोग करते समय falsey होने के रूप में शून्य मान उपेक्षा का कोई तरीका है यदि/किसी और बयान या त्रिगुट ऑपरेटरों?

+3

ऐसा लगता नहीं है। –

उत्तर

2

आप अपना नंबर किसी संख्या ऑब्जेक्ट में लपेट सकते हैं और इसकी जांच कर सकते हैं;

var x = new Number(0) || console.log("never gets printed"); 
 
console.log(parseInt(x)); 
 
//or 
 
console.log(x.valueOf());

+0

अच्छी हालत-कम जवाब। ऐसा लगता है कि ओपी क्या देख रहा था। – clabe45

+0

लेकिन यदि आप 'var x = new number (null) || console.log ("कभी मुद्रित नहीं होता है"); ',' 'प्रिंट नहीं किया जाएगा' ' – NatNgs

1

संपादित करें:

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);

+0

ओप ने कहा कि कोई ternarys – user7951676

+0

आह, आप सही हैं, मेरी गलती है; बिना टर्नरी के नमूना जोड़ा! – NatNgs

0

संपादित करें: यह एक त्रिगुट ऑपरेटर का उपयोग करता है तो, अगर वह नहीं है जो आप ' फिर से तलाश रहे हैं, इसका उपयोग न करें।

बेशक

इस यह करने के लिए एक और आसान तरीका है:

var x = y || y==0?0:z; 

अगर y truthy है, तो x अगर y

पर सेट है y falsy है, और y==0, तो x0

परपर सेट हैझूठा है, और y!=0, तो xz पर सेट है;

+0

'? : 'ternarys ?? उन्होंने कहा कि बिना किसी या टर्नरी –

+0

@ जैकुमार गोंडलीया सच ... लेकिन ऐसा करने के बहुत कम तरीके हैं। – clabe45

0

आप पहले की जांच कर सकता है, तो 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; }

संबंधित मुद्दे