जावास्क्रिप्ट सामान्य एरर
- पिछला पृष्ठ JS बेस्ट प्रैक्टिस
- अगला पृष्ठ JS प्रदर्शन
इस चैप्टर में कुछ सामान्य जेसक्रिप्ट गलतियाँ दी गई हैं。
अपेक्षानुसार अनुच्छेदन ऑपरेटर
यदि प्रोग्रामर if
वाक्यांश में अपेक्षानुसार अनुच्छेदन ऑपरेटर (=
बजाए तुलना ऑपरेटर (=====
इसलिए, जेसक्रिप्ट प्रोग्राम कुछ अपेक्षित नहीं होने वाले परिणाम पैदा कर सकते हैं。
इस if
वाक्यांश वापस देता है false
जैसा अपेक्षित है, क्योंकि x 10 से बिल्कुल असमान है:
var x = 0; if (x == 10)
इस if
वाक्यांश वापस देता है true
क्योंकि 10 true है (शायद अपेक्षित नहीं हो):
var x = 0; if (x = 10)
इस if
वाक्यांश वापस देता है false
क्योंकि 0 false है (शायद अपेक्षित नहीं हो):
var x = 0; if (x = 0)
अनुच्छेदन हमेशा अनुच्छेदन के मूल्य को वापस देता है。
उम्मीद लालसी सम्पादन
सामान्य सम्पादन में, डाटा टाइप कोई महत्व नहीं रखता। यह if
वाक्यांश वापस देता है true
:
var x = 10; var y = "10"; if (x == y)
तीव्र सम्पादन में, डाटा टाइप को वास्तव में महत्वपूर्ण है। यह if
वाक्यांश वापस देता है false
:
var x = 10; var y = "10"; if (x === y)
एक सामान्य गलती यह है कि switch
इस वाक्यांश में तीव्र सम्पादन का उपयोग किया जाता है:
इस switch
इस वाक्यांश में पुश्टि बॉक्स दिखाया जाएगा:
var x = 10; switch(x) { case 10: alert("Hello"); }
इस switch
इस वाक्यांश में पुश्टि बॉक्स दिखाया नहीं जाएगा:
var x = 10; switch(x) { case "10": alert("Hello"); }
गलत समझा गया जोड़ना और श्रृंखलण
जोड़नाजोड़ने के लिएनंबर。
श्रृंखलण (Concatenation)जोड़ने के लिएस्ट्रिंग。
जेसक्रिप्ट में, इन दोनों ऑपरेशन को एक ही ऑपरेटर के रूप में उपयोग किया जाता है +
ऑपरेटर
इसलिए, नंबर को नंबर के रूप में जोड़ने और नंबर को स्ट्रिंग के रूप में जोड़ने, अलग-अलग परिणाम पैदा करेगा:
var x = 10 + 5; // x में परिणाम 15 है var x = 10 + "5"; // x में परिणाम "105" है
यदि दो वेरियेबल जोड़े जाते हैं, परिणाम को अवश्य ही अनुमान नहीं लगाया जा सकता है:
var x = 10; var y = 5; var z = x + y; // z में परिणाम 15 है var x = 10; var y = "5"; var z = x + y; // z में परिणाम "105" है
गलत समझा गया फ्लॉटिंग पॉइंट
जेसक्रिप्ट में सभी नंबर 64 बिट के रूप में सहेजे जाते हैंफ्लॉटिंग (फ्लॉट्स)。
सभी प्रोग्रामिंग भाषाएँ, जेसक्रिप्ट सहित, फ्लॉटिंग पॉइंट्स को संभालने में कठिनाई का सामना करती हैं
वार एक्स = 0.1; वार य = 0.2; वार जी = एक्स + य // जी में परिणाम 0.3 नहीं होगा
उपरोक्त समस्या को सुलझाने के लिए गुणा-विभाजन संग्रह का उपयोग करें:
इंस्टांस
वार जी = (एक्स * 10 + य * 10) / 10; // जी में परिणाम 0.3 होगा
जेसक्रिप्ट शब्द के लाइन बदलना
जेसक्रिप्ट एक वाक्य को लाइन बदलने की अनुमति देता है
उदाहरण 1
वार एक्स = "हेलो वर्ल्ड!";
लेकिन, शब्द के बीच में पंक्ति बदलना सही नहीं है:
उदाहरण 2
वार एक्स = "हेलो वर्ल्ड!";
यदि चाहे तो इस तरह शब्द के अंत में पंक्ति बदलनी है, तो अनुसूचकांक का उपयोग करें:
उदाहरण 3
वार एक्स = "हेलो ", वर्ल्ड!";
गलत स्थिति में सेक़्यूअंस
एक गलत सेक़्यूअंस के कारण, इस कोड ब्लॉक एक्स के मान कितना भी हो, अभी भी चलेगा:
अगर (एक्स == 19); { // कोड ब्लॉक }
वापस वाक्य को लाइन बदलना
एक पंक्ति के अंत में स्वचालित रूप से वाक्य को बंद करना जेसक्रिप्ट का मूलभूत व्यवहार है
इसलिए, नीचे के दो उदाहरणों को पूर्ण परिणाम देते हैं:
उदाहरण 1
फ़ंक्शन माइफ़ान्क्शन(ए) { वार पावर = 10 वापस ए * पावर }
उदाहरण 2
फ़ंक्शन माइफ़ान्क्शन(ए) { वार पावर = 10; वापस ए * पावर; }
जेसक्रिप्ट एक वाक्य को लाइन बदलने की अनुमति देता है
इसलिए, उदाहरण 3 भी एक समान परिणाम देगा:
उदाहरण 3
फ़ंक्शन माइफ़ान्क्शन(ए) { वार पावर = 10; वापस ए * पावर; }
लेकिन, यदि वापस
वाक्य लाइन बदलने पर क्या होगा:
उदाहरण 4
फ़ंक्शन माइफ़ान्क्शन(ए) { वार पावर = 10; वापस ए * पावर; }
इस फ़ंक्शन को वापस देगा अनिर्दिष्ट
!
क्यों? क्योंकि जेसक्रिप्ट आपका अर्थ यह मानता है:
उदाहरण 5
फ़ंक्शन माइफ़ान्क्शन(ए) { वार पावर = 10; वापस; ए * पावर; }
व्याख्या
यदि कोई वाक्य अधूरा है:
वार
जेसक्रिप्ट अगली पंक्ति को पढ़कर इस वाक्य को पूरा करेगा:
पावर = 10;
लेकिन इस वाक्य वास्तव में पूर्ण है:
वापस
जेसक्रिप्ट इस वाक्य को स्वचालित रूप से बंद करेगा:
वापस;
इसका कारण यह है कि, जेसक्रिप्ट में, वाक्य को बंद करने (समाप्त करने) के लिए संकेतःदूरी (सेक़्यूअंस) वैकल्पिक है
जेसक्रिप्ट वाक्य के अंत में बंद करता है वापस
वाक्य क्योंकि यह एक पूर्ण वाक्य है。
वाक्य को निर्णायक न करें वापस
वाक्य लाइन बदलने के लिए
एक नामक सूचकांक के माध्यम से एक्राशियों को आयात करें
बहुत से प्रोग्रामिंग भाषाएँ नामक इंडेक्स वाले अर्रे को समर्थित करती हैं।
नामक इंडेक्स वाले अर्रे को एक्सेस एसोसिएटेड एरे (या हैश) कहा जाता है:
JavaScript नहीं समर्थितनामक इंडेक्स वाले अर्रे
JavaScript में,अर्रेइस्तेमाल करें:संख्या इंडेक्स:
इंस्टांस
var person = []; person[0] = "Bill"; person[1] = "Gates"; person[2] = 46; var x = person.length; // person.length 3 लौटाएगा var y = person[0]; // person[0] "Bill" लौटाएगा
JavaScript में,ऑब्जेक्टइस्तेमाल करें:नामक इंडेक्स。
यदि आप नामक इंडेक्स इस्तेमाल करते हैं, तो अर्रे को देखते समय, JavaScript अर्रे को मानक ऑब्जेक्ट के रूप में पुनर्डिफाइन कर देगा:
स्वचालित पुनर्डिफाइनिश के बाद, अर्रे के विधि या अट्रिब्यूट अविशिष्ट या असहीधा परिणाम उत्पन्न कर सकते हैं:
इंस्टांस
var person = []; person["firstName"] = "Bill"; person["lastName"] = "Gates"; person["age"] = 46; var x = person.length; // person.length 0 लौटाएगा var y = person[0]; // person[0] अविशिष्ट (undefined) लौटाएगा
डिफाइनिशन को साइज़ से समाप्त करने के लिए साइज़ का उपयोग करें:
ऑब्जेक्ट और अर्रे डिफाइनिशन में अंतिम साइज़ ECMAScript 5 में वैध है:
ऑब्जेक्ट इंस्टेंस:
person = {firstName:"Bill", lastName:"Gates", age:62,};
अर्रे इंस्टेंस:
points = [35, 450, 2, 7, 30, 16,];
चेतावनी!!
इंटरनेट एक्सप्लोरर 8 ढह सकता है:
JSON अंतिम साइज़ (trailing comma) नहीं अनुमता करता:
JSON:
person = {firstName:"Bill", lastName:"Gates", age:62};
JSON:
points = [35, 450, 2, 7, 30, 16];
अविशिष्ट (undefined) न्यूल (null) नहीं है:
JavaScript ऑब्जेक्ट, वेरियेबल, अट्रिब्यूट और मेथड अविशिष्ट (undefined) हो सकते हैं:
इसके अलावा, खाली JavaScript ऑब्जेक्ट का मूल्य इस प्रकार हो सकता है: नल
。
यह परीक्षा करना थोड़ा मुश्किल हो सकता है कि ऑब्जेक्ट खाली है:
आप परीक्षा कर सकते हैं कि टाइप क्या है: अनिर्दिष्ट
इस परीक्षा के लिए ऑब्जेक्ट के अस्तित्व को परीक्षा करें:
इंस्टांस
if (typeof myObj === "undefined")
आपको ऑब्जेक्ट को अनिर्दिष्ट होने का परीक्षण नहीं कर सकते नल
क्योंकि यदि ऑब्जेक्ट अनिर्दिष्ट होता है, तो त्रुटि फ्लॉप होगी:
गलत:
if (myObj === null)
इस समस्या को हल करने के लिए, ऑब्जेक्ट को नल होने का परीक्षण करना चाहिए: नल
बजाय अनिर्दिष्ट
इसके बाद भी त्रुटि हो सकती है:
गलत:
if (myObj !== null && typeof myObj !== "undefined")
इसलिए, नल नहीं होने की परीक्षा करने से पहले, अनिर्दिष्ट की परीक्षा करनी चाहिए:
सही:
if (typeof myObj !== "undefined" && myObj !== null)
ब्लॉक स्कोप की उम्मीद नहीं करता
JavaScript नहींप्रत्येक कोड ब्लॉक के लिए नया स्कोप बनाता है。
बहुत से प्रोग्रामिंग लैंग्वेजेज ऐसे हैं, लेकिन JavaScript इस तरह नहीं。
इस कोड को इस तरह वापस करने का विचार करते हैं: अनिर्दिष्ट
यह नए JavaScript डेवलपर की आम गलती है:
इंस्टांस
for (var i = 0; i < 10; i++) { // कोड ब्लॉक } return i;
- पिछला पृष्ठ JS बेस्ट प्रैक्टिस
- अगला पृष्ठ JS प्रदर्शन