जेएस को दो स्ट्रिंग्स को एक साथ रखने के बजाय गणित करने के लिए कैसे मजबूर किया जाए


102

मुझे एक पूर्णांक चर में 5 जोड़ने के लिए जावास्क्रिप्ट की आवश्यकता है, लेकिन इसके बजाय यह चर को एक स्ट्रिंग के रूप में मानता है, इसलिए यह चर लिखता है, फिर "स्ट्रिंग" के अंत में 5 जोड़ें। मैं इसके बजाय गणित करने के लिए कैसे मजबूर कर सकता हूं?

var dots = document.getElementById("txt").value; // 5
function increase(){
    dots = dots + 5;
}

आउटपुट: 55

मैं इसे आउटपुट के लिए कैसे मजबूर कर सकता हूं 10?


3
यह विशेष उदाहरण आउटपुट 10.
छल


10
आपने इसे कम करने का कोई प्रयास किए बिना अपने सभी कोड को डंप करके आपकी मदद करने के इच्छुक लोगों पर अनुचित बोझ डाल दिया है। इसे स्वयं परखें ... क्या सीएसएस विशेषताओं में #controlआपकी समस्या पर कोई फर्क पड़ता है? यदि नहीं, तो उन्हें हटा दें और उन्हें हमें न दिखाएं। अपने कोड को तब तक कम करना जारी रखें जब तक आपके पास आपकी समस्या को पुन: पेश करने के लिए आवश्यक पूर्ण न्यूनतम परीक्षण मामला न हो। ऐसा करने में अधिकांश समय आपको समस्या का पता लगाने और प्रक्रिया में सीखने का कारण बनेगा । यदि आप इसे स्वयं हल नहीं करते हैं, तो आपको अपने सरल उदाहरण के साथ त्वरित सहायता प्राप्त करने की बहुत संभावना है।
फ्रागोज

जवाबों:


108

आपके पास लाइन है

dots = document.getElementById("txt").value;

आपकी फ़ाइल में, यह डॉट्स को एक स्ट्रिंग होने के लिए सेट करेगा क्योंकि txt की सामग्री एक संख्या तक सीमित नहीं है।

इसे एक इंट में बदलने के लिए लाइन को इसमें परिवर्तित करें:

dots = parseInt(document.getElementById("txt").value, 10);

नोट: 10यहां दशमलव (बेस -10) निर्दिष्ट किया गया है। इसके बिना कुछ ब्राउज़र स्ट्रिंग की सही व्याख्या नहीं कर सकते हैं। MDN देखें: parseInt


3
शॉर्टकट ... डॉट्स = + document.getElementById ("txt")। मान
Tracker1

5
parseInt (..., 10) भी, हमेशा एक मूलांक का उपयोग करें ... एक पवित्रता की जाँच करें ... अगर (?! dots डॉट्स <1) क्रम में भी हो सकता है ...
Tracker1

1
परिवर्धन के लिए बेहतर उपयोग वेतन वृद्धि ऑपरेटर। जैसे VARIABLE ++ के बजाय VAR = VAR + 1;
gnganpath

53

सबसे सरल:

dots = dots*1+5;

डॉट्स को संख्या में बदल दिया जाएगा।


34
उससे भी सरल dots = +dots+5
एंडी ई


9

मैं इस उत्तर को जोड़ रहा हूँ क्योंकि मैं इसे यहाँ नहीं देखता।

एक तरीका मूल्य के सामने एक '+' वर्ण रखना है

उदाहरण:

var x = +'11.5' + +'3.5'

x === 15

मैंने इसे सबसे सरल तरीका पाया है

इस मामले में, लाइन:

dots = document.getElementById("txt").value;

में बदला जा सकता है

dots = +(document.getElementById("txt").value);

यह एक संख्या के लिए मजबूर करने के लिए

ध्यान दें:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5

8

parseInt() चाल चलनी चाहिए

var number = "25";
var sum = parseInt(number, 10) + 10;
var pin = number + 10;

आपको देता है

sum == 35
pin == "2510"

http://www.w3schools.com/jsref/jsref_parseint.asp

नोट: 10में parseInt(number, 10)निर्दिष्ट दशमलव (आधार -10)। इसके बिना कुछ ब्राउज़र स्ट्रिंग की सही व्याख्या नहीं कर सकते हैं। MDN देखें: parseInt



1

यह वास्तव में सरल है

var total = (1 * yourFirstVariablehere) + (1 * yourSecondVariablehere)

यह जावास्क्रिप्ट को गुणा करने के लिए मजबूर करता है क्योंकि जावास्क्रिप्ट में * साइन के लिए कोई भ्रम नहीं है।


1

आप चर के पीछे + जोड़ सकते हैं और यह पूर्णांक बनने के लिए मजबूर करेगा

var dots = 5
    function increase(){
        dots = +dots + 5;
    }

1

अपने विशेष मामले के लिए सफलता के बिना यहाँ अधिकांश उत्तरों की कोशिश करने के बाद, मैं इसके साथ आया:

dots = -(-dots - 5);

+ संकेत जेएस को भ्रमित करते हैं, और यह उन्हें पूरी तरह से समाप्त कर देता है। लागू करने के लिए सरल, यदि संभावित रूप से समझने में भ्रमित है।


-3

अद्यतन किया गया क्योंकि यह अंतिम रूप से अस्वीकृत था ...।

मैंने केवल भाग देखा

var dots = 5
function increase(){
    dots = dots+5;
}

पहले, लेकिन यह बाद में मुझे दिखाया गया था कि txtबॉक्स चर को खिलाता हैdots । इस वजह से, आपको इनपुट को "साफ़" करने की आवश्यकता होगी, यह सुनिश्चित करने के लिए कि इसमें केवल पूर्णांक हैं, और दुर्भावनापूर्ण कोड नहीं है।

ऐसा करने का एक आसान तरीका यह है कि पाठ बॉक्स को एक onkeyup()घटना के साथ पार्स करें ताकि यह सुनिश्चित हो सके कि इसमें संख्यात्मक वर्ण हैं:

<input size="40" id="txt" value="Write a character here!" onkeyup="GetChar (event);"/>

यदि ईवेंट एक त्रुटि देगा और अंतिम वर्ण को साफ़ कर देगा यदि मान एक संख्या नहीं है:

<script type="text/javascript">
    function GetChar (event){
        var keyCode = ('which' in event) ? event.which : event.keyCode;
        var yourChar = String.fromCharCode();
        if (yourChar != "0" &&
            yourChar != "1" &&
            yourChar != "2" &&
            yourChar != "3" && 
            yourChar != "4" &&
            yourChar != "5" &&
            yourChar != "6" && 
            yourChar != "7" &&
            yourChar != "8" && 
            yourChar != "9")
        {
            alert ('The character was not a number');
            var source = event.target || event.srcElement;
            source.value = source.value.substring(0,source.value-2);
        }
    }
</script>

जाहिर है आप ऐसा कर सकते हैं regex के साथ, भी, लेकिन मैं आलसी तरीके से बाहर ले गया।

तब से आपको पता होगा कि केवल संख्याएँ बॉक्स में हो सकती हैं, आपको बस उपयोग करने में सक्षम होना चाहिए eval():

dots = eval(dots) + 5;

2
eval()खतरनाक है अगर dotsउपयोगकर्ता इनपुट से है, खासकर अगर यह संग्रहीत इनपुट से है। अधिक जानकारी
चाड लेवी

@ChadLevy इस लिंक के लिए धन्यवाद - एक अच्छा पढ़ा - और इसे ऊपर ला रहा हूं, लेकिन इस मामले में चिंता अनुचित थी, क्योंकि यह उपयोगकर्ता इनपुट से नहीं था। dotsएक परिभाषित चर था जिसे बढ़ाया जा रहा था और बस एक स्ट्रिंग के लिए गलत किया जा रहा था। तो मैं अपने जवाब को योग्य करूंगा कि इसे हल्के ढंग से इस्तेमाल नहीं किया जाना चाहिए, जैसा कि आपने कहा, उपयोगकर्ता / संग्रहीत इनपुट से जो बुरी स्क्रिप्टिंग इंजेक्शन के लिए संभावित हो सकता है। लेकिन इस मामले में भी, इस तरह के इंजेक्शन एक गणित त्रुटि / अपवाद का कारण होगा, वैसे भी, तो यह वास्तव में कुछ भी नहीं होगा, किसी भी तरह से।
वाप्गुगी

उन डाउनवोटिंग के लिए क्योंकि आप सोचते हैं eval() है यह बहुत खतरनाक है, आपको उस संदर्भ में कोड को देखने की जरूरत है जिसका ओपी उपयोग कर रहा था। यह इस मामले में नहीं है, क्योंकि वह ऐसे इनपुट का उपयोग कर रहा है, जो टेक्स्टबॉक्स या किसी अन्य उपयोगकर्ता इनपुट से नहीं आ रहा है, जहां गैर-संख्यात्मक मान के इंजेक्शन का कोई भी रूप हो सकता है! काश, मैं आपके पतन को कम कर पाता!
vapcguy

एक और नीच। केवल एक भेड़ होने के बजाय, खुद को समझाने की परवाह करें? ऐसे समय होते हैं जब eval()आप ठीक होते हैं, और आपको उस संदर्भ को देखने की आवश्यकता होती है जिसमें इसका उपयोग किया जा रहा है, बजाय इसके कि आप आँख बंद करके विश्वास करते हैं कि आपने जो कुछ भी पढ़ा है, उसे वास्तव में समझे बिना!
वाप्गुगी

1
@ChadLevy ठीक है, उस गिनती पर, आप सही हैं। मैंने उस खंड को नहीं देखा - मैं उस पर केंद्रित था जो उसने पृष्ठ के शीर्ष पर रखा था: कोडvar dots = 5 function increase(){ dots = dots+5; } पाठ फ़ील्ड का उपयोग नहीं करता है, और उपयोगकर्ता चर से नहीं, प्रत्यक्ष चर का उपयोग करते हुए असाइन करता है। तो वह है जो मैं चला गया। लेकिन मैंने देखा कि आप सही हैं कि वह उस पाठ क्षेत्र txtको असाइन कर रहा है dots, और dotsएक वैश्विक चर है, और इसलिए उस इनपुट से अपडेट हो जाता है। आप सही हे। धन्यवाद।
vapcguy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.