जावास्क्रिप्ट सामान्य एरर

इस चैप्टर में कुछ सामान्य जेसक्रिप्ट गलतियाँ दी गई हैं。

अपेक्षानुसार अनुच्छेदन ऑपरेटर

यदि प्रोग्रामर 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;

स्वयं प्रयोग करें