2013-03-17 6 views
41

सेटिंग डिफ़ॉल्ट जावास्क्रिप्ट में वैकल्पिक मूल्यों आमतौर पर || चरित्रजावास्क्रिप्ट में डिफ़ॉल्ट बूलियन मान कैसे सेट करें?

var Car = function(color) { 
    this.color = color || 'blue'; 
}; 

var myCar = new Car(); 
console.log(myCar.color); // 'blue' 

var myOtherCar = new Car('yellow'); 
console.log(myOtherCar.color); // 'yellow' 

काम करता है ऐसा इसलिए है क्योंकि colorundefined है और undefined || String हमेशा String है के माध्यम से किया जाता है। बेशक यह String || undefined के आसपास अन्य तरीके भी काम करता है String है। जब दो Strings मौजूद होते हैं तो पहला व्यक्ति 'this' || 'that''this' जीतता है। यह 'that' || 'this''that' के आसपास दूसरी तरफ काम नहीं करता है।

सवाल यह है कि: मैं बुलियन मूल्यों के साथ इसे कैसे प्राप्त कर सकता हूं?

myCar के लिए निम्न उदाहरण

var Car = function(hasWheels) { 
    this.hasWheels = hasWheels || true; 
} 

var myCar = new Car(); 
console.log(myCar.hasWheels); // true 

var myOtherCar = new Car(false) 
console.log(myOtherCar.hasWheels); // ALSO true !!!!!! 

ले लो यह काम करता है क्योंकि undefined || truetrue है लेकिन जैसा कि आप इसके लिए myOtherCar क्योंकि false || true है true काम नहीं करता है देख सकते हैं। आदेश बदलना true || false के रूप में मदद नहीं करता है अभी भी true है।

इसलिए, क्या मुझे यहां कुछ याद आ रहा है या डिफ़ॉल्ट मान सेट करने का एकमात्र तरीका निम्न है?

this.hasWheels = (hasWheels === false) ? false: true 

चीयर्स!

उत्तर

90

आप ऐसा कर सकते हैं:

this.hasWheels = hasWheels !== false; 

को छोड़कर जब hasWheels स्पष्ट false है आप एक true मूल्य हो जाता है यही कारण है कि । (null और undefined सहित अन्य falsy मूल्यों,, true में परिणाम होगा, जो मुझे लगता है कि तुम क्या चाहते है।)

+0

यह स्मार्ट है! मुझें यह पसंद है। – zemirco

+0

@zeMirco: तो क्या आप वास्तव में 'झूठी' को 'सत्य' मानने के अलावा सभी झूठे मूल्यों के लिए पूछ रहे हैं? यदि ऐसा है, तो मुझे आश्चर्य होगा कि आप पहली जगह क्यों '||' का उपयोग करना चाहते हैं। स्पष्ट रूप से 'झूठी' के लिए एक स्पष्ट परीक्षण सबसे सरल समाधान होगा। –

+0

@ थिससिस्टम - वह '||' का उपयोग नहीं करना चाहता था; यह गैर-बूलियन मूल्यों के लिए '||' का उपयोग करने से ही ले जाया गया था। प्रश्न पोस्ट किया गया था, मुझे लगता है, क्योंकि '|| –

6

के बारे में कैसे:

this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true; 

आपका चारा नहीं है:

this.hasWheels = arguments.length > 0 ? hasWheels : true; 
+2

यह अच्छी तरह से काम करता है, हालांकि मैं '' का उपयोग करने का सुझाव दूंगा? !! के बजाय हैशल्स '? हैशल्स 'गारंटी देता है कि या तो' सत्य 'या' झूठा '(और कुछ भी नहीं) को' this.hasWheels 'को असाइन किया गया है। –

3

आप ECMA6 में Default function parameters सुविधा का उपयोग कर सकते हैं। आज, ईसीएमए 6 अभी भी ब्राउज़र में पूरी तरह से समर्थित नहीं है लेकिन आप babel का उपयोग कर सकते हैं और तुरंत नई सुविधाओं का उपयोग शुरू कर सकते हैं।

// specify default value for the hasWheels parameter 
var Car = function(hasWheels = true) { 
    this.hasWheels = hasWheels; 
} 

var myCar = new Car(); 
console.log(myCar.hasWheels); // true 

var myOtherCar = new Car(false) 
console.log(myOtherCar.hasWheels); // false 
+1

लेकिन अगर कोई झूठी मान (यानी खाली स्ट्रिंग) में गुजरता है तो 'this.hasWheels' को बूलियन मान के बजाय खाली स्ट्रिंग असाइन की जाएगी। शायद 'हैशहेल्स =' टाइप करना चाहते हैं (टाइपऑफ हैहेल्स === 'बूलियन')? हैशल्स: सच; ' –

2

विविधताओं पोस्ट जवाब के ध्यान दिया जाना चाहिए रहे हैं:

तो, मूल उदाहरण के रूप में सरल रूप में हो जाएगा।

var Var = function(value) { 
    this.value0 = value !== false; 
    this.value1 = value !== false && value !== 'false'; 
    this.value2 = arguments.length <= 0 ? true : arguments[0]; 
    this.value3 = arguments[0] === undefined ? true : arguments[0]; 
    this.value4 = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; 
}; 

        value0 value1 value2  value3   value4 
--------------------------------------------------------------------------- 
Var("")    true  true  true   true   true 
Var("''")   true  true  ''   ''    '' 
Var("0")    true  true  0    0    0 
Var("'0'")   true  true  '0'   '0'   '0' 
Var("NaN")   true  true  NaN   NaN   NaN 
Var("'NaN'")   true  true  'NaN'   'NaN'   'NaN' 
Var("null")   true  true  null   null   null 
Var("'null'")  true  true  'null'  'null'   'null' 
Var("undefined")  true  true  undefined  true   true 
Var("'undefined'") true  true  'undefined' 'undefined' 'undefined' 
Var("true")   true  true  true   true   true 
Var("'true'")  true  true  'true'  'true'   'true' 
Var("false")   false false false   false   false 
Var("'false'")  true  false 'false'  'false'  'false' 
  • value1 स्ट्रिंग के लिए 'असत्य' विशेष रूप से value0 से बनाया गया है कि अगर एक की जरूरत है यह बूलियन गलत। मुझे यह छूट मौलिक रूप से उपयोगी मिली।
  • value2 और value3 बदले गए परिणामों के बिना स्थिरता के लिए मूल पोस्ट किए गए उत्तरों के संशोधन हैं।
  • value4 यह है कि कैसे डिफ़ॉल्ट पैरामीटर के लिए बेबेल संकलित करता है।
संबंधित मुद्दे