क्या बिना विवरण के NaN मानों को 0 में बदलने का कोई तरीका है:
if (isNaN(a)) a = 0;
हर बार मेरे चर की जाँच करना बहुत कष्टप्रद होता है।
function noNaN( n ) { return isNaN( n ) ? 0 : n; }और फिर बसnoNaN( a )
क्या बिना विवरण के NaN मानों को 0 में बदलने का कोई तरीका है:
if (isNaN(a)) a = 0;
हर बार मेरे चर की जाँच करना बहुत कष्टप्रद होता है।
function noNaN( n ) { return isNaN( n ) ? 0 : n; }और फिर बसnoNaN( a )
जवाबों:
तुम यह केर सकते हो:
a = a || 0
... जो कि किसी भी "फाल्सी" मूल्य से परिवर्तित हो जाएगा 0।
"गलत" मान हैं:
falsenullundefined0"" ( खाली स्ट्रिंग )NaN (संख्या नहीं)या यह अगर आप पसंद करते हैं:
a = a ? a : 0;
... जिसका ऊपर जैसा असर होगा।
यदि इरादे केवल अधिक से अधिक के लिए परीक्षण करना था NaN, तो आप ऐसा कर सकते हैं, लेकिन पहले toNumber रूपांतरण करें।
a = +a || 0
यह aएक संख्या में कनवर्ट करने का प्रयास करने के लिए unary + ऑपरेटर का उपयोग करता है । इसमें संख्यात्मक स्ट्रिंग्स जैसी चीजों '123'को एक संख्या में परिवर्तित करने का अतिरिक्त लाभ है ।
केवल अप्रत्याशित चीज हो सकती है यदि कोई व्यक्ति एक ऐरे से गुजरता है जिसे सफलतापूर्वक एक संख्या में परिवर्तित किया जा सकता है:
+['123'] // 123
यहाँ हमारे पास एक Array है जिसमें एक एकल सदस्य है जो एक संख्यात्मक स्ट्रिंग है। इसे सफलतापूर्वक एक नंबर में बदल दिया जाएगा।
NaNमूल्य से संबंधित था । यह सभी गैर-संख्या मानों के परीक्षण के रूप में काम नहीं करेगा। हालाँकि हम पहले एक toNumber रूपांतरण का प्रयास कर सकते थे। मैं अपडेट करूंगा।
डबल-टिल्ड (डबल बिटवाइज़ नहीं) का उपयोग करना - ~~- जावास्क्रिप्ट में कुछ दिलचस्प बातें करता है। उदाहरण के लिए आप इसका उपयोग कर सकते हैं Math.floorया इसके विकल्प के रूप में भी कर सकते हैं parseInt("123", 10)! यह वेब पर बहुत चर्चा की गई है, इसलिए मैं इसमें नहीं जाऊंगा कि यह यहां क्यों काम करता है, लेकिन यदि आप रुचि रखते हैं: जावास्क्रिप्ट में "डबल टिल्ड" (~~) ऑपरेटर क्या है?
हम NaNएक नंबर में बदलने के लिए एक डबल-टिल्ड की इस संपत्ति का शोषण कर सकते हैं , और खुशी से यह संख्या शून्य है!
console.log(~~NaN); // 0
~~सब पर, मैं सिर्फ ओर के साथ यह प्रयोग किया जाता के साथ parseFloat()तो जैसे: ~~parseFloat($variable);। बहुत साफ :) +1
अपनी स्वयं की विधि लिखें, और इसका उपयोग हर उस जगह करें जहाँ आप एक संख्या मान चाहते हैं:
function getNum(val) {
if (isNaN(val)) {
return 0;
}
return val;
}
nullतो यह मुझे अपेक्षित परिणाम नहीं देता 0। मेरी बात यहाँ और अधिक: stackoverflow.com/questions/115548/why-is-isnannull-false-in-js
Number(val)इसका उपयोग करने के बजाय इसे समाप्त कर दिया क्योंकि यह 0किसी भी तरह से इसका पता नहीं लगा सकता है।
कुछ के लिए कुछ सरल और प्रभावी:
function getNum(val) {
val = +val || 0
return val;
}
... जो कि किसी भी "फाल्सी" मूल्य से परिवर्तित हो जाएगा 0।
"गलत" मान हैं:
falsenullundefined0"" ( खाली स्ट्रिंग )NaN (संख्या नहीं)इसे खत्म करने के बजाय आप इसे जारी रख सकते हैं, तो क्यों न पीछे हटें और आश्चर्य करें कि आप पहले स्थान पर NaN में क्यों भाग रहे हैं?
यदि किसी ऑपरेशन में कोई संख्यात्मक जानकारी NaN है, तो आउटपुट भी NaN होगा। यही कारण है कि वर्तमान IEEE फ़्लोटिंग पॉइंट मानक काम करता है (यह सिर्फ जावास्क्रिप्ट नहीं है)। यह व्यवहार एक अच्छे कारण के लिए है : अंतर्निहित इरादा आपको फर्जी परिणाम का उपयोग करने से रोकने के लिए है बिना यह समझे कि यह फर्जी है।
जिस तरह से NaN काम करता है अगर कुछ उप-उप-सब-ऑपरेशन (उस निचले स्तर पर NaN का निर्माण) में कुछ गलत हो जाता है, तो अंतिम परिणाम भी NaN होगा, जिसे आप तुरंत एक त्रुटि के रूप में भी पहचान सकते हैं त्रुटि हैंडलिंग तर्क (शायद फेंक / पकड़ें?) अभी तक पूरा नहीं हुआ है।
एक अंकगणितीय गणना के परिणाम के रूप में NaN हमेशा इंगित करता है कि अंकगणित के विवरण में कुछ गड़बड़ हो गया है। यह कंप्यूटर के लिए "डिबगिंग यहाँ आवश्यक" कहने का एक तरीका है। कुछ संख्या के साथ किसी भी तरह जारी रखने का कोई रास्ता खोजने के बजाय, यह शायद ही कभी सही है (0 वास्तव में आप क्या चाहते हैं?), समस्या क्यों नहीं ढूंढते और इसे ठीक करें।
जावास्क्रिप्ट में एक आम समस्या दोनों कि है parseInt(...)और parseFloat(...)NaN वापस आ जाएगी अगर एक अतर्कसंगत तर्क (दी null, '', आदि)। उच्च स्तर के बजाय समस्या को न्यूनतम स्तर पर ठीक करें। फिर समग्र गणना के परिणाम से समझ बनाने का अच्छा मौका है, और आप पूरी गणना के परिणाम के लिए कुछ मैजिक नंबर (0 या 1 या जो भी) प्रतिस्थापित नहीं कर रहे हैं। (की चाल (parseInt (foo.value)) || 0) केवल रकम के लिए काम करता है, उत्पादों के लिए नहीं - ऐसे उत्पादों के लिए जिन्हें आप चाहते हैं कि डिफ़ॉल्ट मान 0 के बजाय 1 हो, लेकिन यह नहीं कि यदि निर्दिष्ट मान वास्तव में 0. है)
शायद कोडिंग में आसानी के लिए आप उपयोगकर्ता से एक मान प्राप्त करना चाहते हैं, इसे साफ़ करें, और यदि आवश्यक हो तो एक डिफ़ॉल्ट मान प्रदान करें:
function getFoobarFromUser(elementid) {
var foobar = parseFloat(document.getElementById(elementid).innerHTML)
if (isNaN(foobar)) foobar = 3.21; // default value
return(foobar.toFixed(2));
}
रेगेक्स के बारे में कैसे ?
function getNum(str) {
return /[-+]?[0-9]*\.?[0-9]+/.test(str)?parseFloat(str):0;
}
नीचे दिए गए कोड NaN को ठीक से दर्ज संख्याओं की गणना करने की अनुमति नहीं देंगे
यदि आप parseInt का उपयोग करने की कोशिश कर रहे हैं, तो NNN का उपयोग करने के तरीके काम नहीं करते हैं:
parseInt("abc"); // NaN
parseInt(""); // NaN
parseInt("14px"); // 14
लेकिन दूसरे मामले में NNN गलत उत्पादन करता है (यानी नल स्ट्रिंग एक संख्या है)
n="abc"; isNaN(n) ? 0 : parseInt(n); // 0
n=""; isNaN(n) ? 0: parseInt(n); // NaN
n="14px"; isNaN(n) ? 0 : parseInt(n); // 14
सारांश में, नल स्ट्रिंग isNaN द्वारा एक मान्य संख्या माना जाता है, लेकिन parseInt द्वारा नहीं। OSX Mojave पर सफारी, फ़ायरफ़ॉक्स और क्रोम के साथ सत्यापित।
var i = [NaN, 1,2,3];
var j = i.map(i =>{ return isNaN(i) ? 0 : i});
console.log(j)
[0,1,2,3]
उपयोगकर्ता 113716 समाधान का उपयोग करते हुए, जो कि उन सभी से बचने के लिए बहुत अच्छा है, अगर-और मैंने इसे पाठ बॉक्स इकाई और टेक्स्टबॉक्स मात्रा से मेरे उप-पाठ टेक्स्टबॉक्स की गणना करने के लिए इसे लागू किया है।
यूनिट और मात्रा टेक्स्टबॉक्स में गैर संख्याओं की प्रक्रिया लेखन में, उनके मूल्यों को शून्य से बदल दिया जाता है ताकि उपयोगकर्ता डेटा की अंतिम पोस्टिंग में कोई गैर-संख्या न हो।
<script src="/common/tools/jquery-1.10.2.js"></script>
<script src="/common/tools/jquery-ui.js"></script>
<!----------------- link above 2 lines to your jquery files ------>
<script type="text/javascript" >
function calculate_subtotal(){
$('#quantity').val((+$('#quantity').val() || 0));
$('#unit').val((+$('#unit').val() || 0));
var calculated = $('#quantity').val() * $('#unit').val() ;
$('#subtotal').val(calculated);
}
</script>
<input type = "text" onChange ="calculate_subtotal();" id = "quantity"/>
<input type = "text" onChange ="calculate_subtotal();" id = "unit"/>
<input type = "text" id = "subtotal"/>
कृपया इस सरल कार्य का प्रयास करें
var NanValue = function (entry) {
if(entry=="NaN") {
return 0.00;
} else {
return entry;
}
}