2012-02-24 9 views
20

मैं इस कोड है:जावास्क्रिप्ट: या तो एक चर का उपयोग करें, या अगर यह अपरिभाषित है, एक डिफ़ॉल्ट स्ट्रिंग

var phrase = function (variable, defaultPhrase) { 
    if (typeof variable === "undefined") { 
     return defaultPhrase; 
    } 
    else { 
     return variable; 
    } 
} 

यह इस तरह कहा जाता है:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //... 

मुझे क्या करना चाहते हैं का उपयोग करने के लिए है एक डिफ़ॉल्ट वाक्यांश जब चर परिभाषित नहीं किया गया है, लेकिन जब मैं एक अपरिभाषित चर phrase() पर पास करता हूं, तो जेएस एक अपरिभाषित चर त्रुटि को फेंकता है। मैं यह कैसे तय करुं? ऐसा करने के लिए कोई अन्य विचार?

+0

इस देखें: http://stackoverflow.com/questions/894860/how-do-i-make-a-default-value-for -ए-पैरामीटर-टू-ए-जावास्क्रिप्ट-फ़ंक्शन – westmark

+0

कौन सा ब्राउज़र इस समस्या को दिखा रहा है/दिखा रहा है? देखें [यह jsfiddle] (http://jsfiddle.net/CBG2f/), जो मेरे लिए एफएफ 10 में काम करता है ठीक है। – Jeroen

उत्तर

47

आपको किसी फ़ंक्शन की आवश्यकता नहीं है। || ऑपरेटर आम तौर पर प्रयोग किया जाता है:

someValue || defaultValue 

तार के लिए, defaultValue अगर someValue === "" प्रयोग किया जाता है:

Ext.Msg.show({ title: js_shutdown || 'Shutdown', //... 

आप || के रूप में देख सकते हैं।

यदि चर बिल्कुल परिभाषित नहीं किया गया है, तो आपको typeof x === "undefined" चेक इनलाइन करने की आवश्यकता होगी, क्योंकि आप चर को किसी फ़ंक्शन में पास नहीं कर सकते हैं (यह ReferenceError है)।

+0

गलत। अगर कुछ वैल्यू = 0 अपरिभाषित होने के बजाय, डिफ़ॉल्ट वैल्यू का उपयोग किया जाएगा। – Jerry

0

मैं आमतौर पर संभावित सुरक्षा समस्याओं की अनुपस्थिति में title: js_shutdown || 'Shutdown' की तरह कोड करता हूं।

1

उपयोग logical OR operator:

var phrase = variable || defaultPhrase; 

या इनलाइन:

Ext.Msg.show({title: (js_shutdown || 'Shutdown')), //... 
1

जावास्क्रिप्ट में, आपको आमतौर OR ऑपरेटर || का उपयोग एक विकल्प के मूल्य जब एक चर अपरिभाषित है प्रदान करने के लिए:

return variable || defaultPhrase || '' 

मामले में variable अपरिभाषित है डी, यह गलत होने का मूल्यांकन करेगा, फिर परीक्षण के दूसरे भाग का मूल्यांकन किया जाएगा, यदि यह भी अनिर्धारित है, तो भी आप एक खाली स्ट्रिंग वापस कर सकते हैं।

+1

नहीं, 'शून्य' और '0' भी इस ऑपरेटर के साथ गिरते हैं। – zjeraar

2

यह एक अपरिभाषित चर के संदर्भ में एक जावास्क्रिप्ट त्रुटि है जिसमें आपके फ़ंक्शन कॉल में कोई गुंजाइश नहीं है। तो, अगर चर js_shutdown दायरे में मौजूद नहीं है, तो यह:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //... 

कोई त्रुटि है।

उदाहरण के लिए, इस कोड को लाइन phrase() फ़ंक्शन को कॉल करने पर एक त्रुटि का कारण बनता है:

var Ext = {}; 
Ext.Msg = {}; 
Ext.Msg.show = function() {console.log("success")}; 

function phrase(variable, defaultPhrase) { 
    return(variable || defaultPhrase); 
} 

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown')});​ 

क्योंकि जावास्क्रिप्ट इंजन किसी भी दायरे में js_shutdown ढूँढने में सक्षम नहीं है।

लेकिन, क्या यह ठीक है:

var Ext = {}; 
Ext.Msg = {}; 
Ext.Msg.show = function() {console.log("success")}; 

function phrase(variable, defaultPhrase) { 
    return(variable || defaultPhrase); 
} 

Ext.Msg.show({title: phrase(window.js_shutdown,'Shutdown')});​ 

आप देख सकते हैं कि यह यहाँ काम करता है: http://jsfiddle.net/jfriend00/JFz6R/

क्योंकि आप जे एस इंजन कहां js_shutdown देखने के लिए और जब यह नहीं है बता दिया है वहां, यह केवल वाक्यांश फ़ंक्शन (जैसा कि आप चाहते हैं) के लिए अपरिभाषित हो जाता है।

-1

यह हो नहीं करना चाहिए:

var phrase = function (variable, defaultPhrase){ 
    if(variable == undefined){ 
     return defaultPhrase; 
    }else{ 
     return variable; 
    } 
} 
11

आमतौर पर का उपयोग कर ||, पर्याप्त है दूसरों की तरह का सुझाव दिया है। हालांकि, यदि आप स्वीकार्य मानों के रूप में 0, झूठी और शून्य होना चाहते हैं, तो आपको वास्तव में यह जांचने की आवश्यकता है कि चर का प्रकार अपरिभाषित है या नहीं। आप इसे एक एक लाइनर बनाने के लिए त्रिगुट ऑपरेटर का उपयोग कर सकते हैं:

var variable; 
var defaultPhrase = "Default"; 
var phrase = (typeof variable === "undefined" ? defaultPhrase : variable); 
console.log(phrase); 
// => "Default" 
संबंधित मुद्दे