जावास्क्रिप्ट त्रुटि के लिए संभावित मामले: "अपेक्षित पहचानकर्ता, स्ट्रिंग या संख्या"


84

कुछ उपयोगकर्ता मेरी साइट पर कभी-कभी JS त्रुटियों की रिपोर्ट कर रहे हैं। त्रुटि संदेश "अपेक्षित पहचानकर्ता, स्ट्रिंग या संख्या" कहता है और पंक्ति संख्या 423725915 है, जो कि एक मनमाना संख्या है और ऐसा होने पर प्रत्येक रिपोर्ट के लिए परिवर्तन होता है। यह ज्यादातर IE7 / मोज़िला 4.0 ब्राउज़र के साथ होता है।

मैंने अपने कोड को कई बार स्कैन किया और jslint चलाया लेकिन यह कुछ भी नहीं उठा - किसी को भी जेएस समस्याओं के सामान्य प्रकार के बारे में पता है जो इस त्रुटि संदेश को जन्म देता है?


पहली बात जो मन में आती है वह स्पष्ट है।
— एंथनी फोर्लोनी

क्या यह एक सरणी शाब्दिक हो सकता है जिसे अंत में एक झूलता हुआ अल्पविराम मिला हो? (इसके अलावा, "मोज़िला 4.0" क्या है?)
— पॉइन्टी

मोज़िला 4.0 userAgent स्ट्रिंग में संगत
— psychotik

जवाबों:


147

इस प्रकार की त्रुटि का कारण अक्सर किसी वस्तु या सरणी परिभाषा में एक गलत अल्पविराम हो सकता है:

var obj = {
   id: 23,
   name: "test",  <--
}

यदि यह एक यादृच्छिक रेखा पर प्रकट होता है, तो हो सकता है कि यह किसी वस्तु के विक्षेप का हिस्सा हो जिसे आप गतिशील रूप से बना रहे हैं।


यह एक लापता था; एक घटना असाइनमेंट में। गतिशील रूप से निर्मित वस्तुओं को देखने के लिए सुराग ने इसे लेने में मदद की। jslint को शुरू में यह पता नहीं चला कि यह html पेज के भाग के रूप में इनलाइन js के रूप में उत्पन्न हुआ था। धन्यवाद!
— मनोचिकित्सा

2
नहीं, यह नहीं होगा। अधिकांश आधुनिक ब्राउज़र आपके लिए इसे ठीक कर देते हैं। IE6 / 7 नहीं है। और IE7 इम्यूलेशन मोड में IE8 डिबगिंग यह पकड़ नहीं करता है। (मुझे लगता है कि आप जानते हैं कि IE7 में डिबगर नहीं है - VS का उपयोग IE7 के साथ यह भी नहीं पकड़ता है)। इसे
— आजमाइए

1
धन्यवाद! जाहिरा तौर पर यह क्रोम जैसे अन्य ब्राउज़रों में कोई समस्या नहीं है।
— बी सेवन

5
आप रेगेक्स ", \ s *]" और ", \ _ * \}" (बिना उद्धरण के) का उपयोग करके ऐसी घटनाओं को खोज सकते हैं। मुझे बहुत समय बचाया।
— गौखान कर्ट

2
रेखा के साथ जावास्क्रिप्ट के लिए रेगेक्स इस तरह से टूट जाता है: ,\s*?\n?\s*?]और,\s*?\n?\s*?\}
— हायातबीरलेम

84

जावास्क्रिप्ट शब्दकोष में कुंजी के रूप में शब्द वर्ग का उपयोग करना भी खतरनाक "अपेक्षित पहचानकर्ता, स्ट्रिंग या संख्या" त्रुटि को ट्रिगर कर सकता है क्योंकि इंटरनेट एक्सप्लोरर में वर्ग एक आरक्षित कीवर्ड है।

खराब

{ class : 'overlay'} // ERROR: Expected identifier, string or number

अच्छा

{'class': 'overlay'}

जावास्क्रिप्ट शब्दकोष में कुंजी के रूप में आरक्षित कीवर्ड का उपयोग करते समय, कुंजी को उद्धरण में संलग्न करें।

आशा है कि यह संकेत आपको डेबगिंग नरक के दिन बचाता है।


एक अच्छा, मैं इस समस्या से घंटों से जूझ रहा हूँ। अब हल किया।
— जॉन प्रादो

जरूरत से ज्यादा लंबे समय तक इस जावास्क्रिप्ट लाइब्रेरी को घूरने से बचाने के लिए धन्यवाद सर।
— खेपरी

1
मैंने JSHint को एक बग सबमिट किया, उम्मीद है कि वे भविष्य में इस प्रकार की त्रुटियों का पता लगाने में सक्षम होंगे: github.com/jshint/jshint/issues/1000
— ट्रैविस

1
@travis उन्होंने वास्तव में # 674 :-) के परिणाम के रूप में इसकी अनुमति दी
— cmbuckley

3
मेरे पास बिल्कुल वही त्रुटि थी, लेकिन संपत्ति "आयात" पर। यहां "आरक्षित शब्द" डेवलपर
— mozilla.org/en-US/docs/Web/JavaScript/Reference/…

11

वास्तव में मुझे IE पर हाल ही में ऐसा कुछ मिला है और यह जावास्क्रिप्ट सिंटैक्स "त्रुटियों" से संबंधित था। मैं उद्धरणों में त्रुटि कहता हूं क्योंकि यह हर जगह ठीक था लेकिन IE पर। यह IE6 के तहत था। समस्या JSON ऑब्जेक्ट निर्माण और अतिरिक्त कॉमा से संबंधित थी, जैसे कि

{ one:1, two:2, three:3, }

IE6 वास्तव में 3 के बाद उस अल्पविराम को पसंद नहीं करता है। आप ऐसा कुछ देख सकते हैं, थोड़ा वाक्यविन्यास औपचारिकता मुद्दों को स्पर्श करें।

हां, मुझे लगा कि मेरी 25 लाइन जावास्क्रिप्ट में मल्टी-मिलियन लाइन नंबर दिलचस्प था।

सौभाग्य।


+1 इससे मुझे बहुत मदद मिली। अतिरिक्त प्रश्न चिह्न मेरे लिए ie8 को नहीं तोड़ पाया, लेकिन 7 को तोड़ दिया।
— इवान डर्स्ट

9

यह एक निश्चित संयुक्त राष्ट्र-उत्तर है: दूसरों को सही उत्तरों की ओर नेविगेट करने में मदद करने के लिए एक आकर्षक-लेकिन-गलत उत्तर को समाप्त करना।

ऐसा लगता है कि डिबगिंग समस्या को उजागर करेगी। हालाँकि, समस्या का एकमात्र ब्राउज़र IE में है, और IE में आप केवल उस कोड को डीबग कर सकते हैं जो मूल दस्तावेज़ का हिस्सा था। गतिशील रूप से जोड़े गए कोड के लिए, डीबगर केवल शरीर के तत्व को वर्तमान निर्देश के रूप में दिखाता है, और IE दावा करता है कि त्रुटि एक बड़ी लाइन नंबर पर हुई थी।

यहाँ एक नमूना वेब पेज है जो IE में इस समस्या को प्रदर्शित करेगा:

<html>
<head>
<title>javascript debug test</title>
</head>
<body onload="attachScript();">
<script type="text/javascript">
function attachScript() {
   var s = document.createElement("script");
   s.setAttribute("type", "text/javascript");
   document.body.appendChild(s);
   s.text = "var a = document.getElementById('nonexistent'); alert(a.tagName);"
}
</script>
</body>

इससे मेरे लिए निम्नलिखित त्रुटि हुई:

Line: 54654408
Error: Object required

@Protectorone अस्थायी रूप से दस्तावेज़ में स्वयं को <script>टैग के माध्यम से या तो स्थानीय या एक लोड किए गए संसाधन के रूप में जावास्क्रिप्ट में रखता है । डिबग। अपनी वर्किंग स्क्रिप्ट पर वापस जाएं।
— एरिक

5

बस मेरे एक एप्लिकेशन में बग को देखा, एक कैच-ऑल के रूप में, सभी जावास्क्रिप्ट गुणों के नाम को संलग्न करना याद रखें जो कीवर्ड के समान हैं।

एक बग में भाग लेने के बाद यह बग मिला जहां एक वस्तु जैसे:

var x = { class: 'myClass', function: 'myFunction'};

त्रुटि उत्पन्न हुई (वर्ग और फ़ंक्शन कीवर्ड हैं) यह उद्धरण जोड़कर तय किया गया था

var x = { 'class': 'myClass', 'function': 'myFunction'};

मैं आपको कुछ समय बचाने की उम्मीद करता हूं


मैं उसी मुद्दे में भाग गया। मेरा कोड कुछ ऐसा उपयोग कर रहा था, if(_features.delete){...}जो एक त्रुटि पैदा कर रहा था क्योंकि हटाना एक कीवर्ड है। stackoverflow.com/questions/26255/…
— स्नेक


2

जैसा कि पहले उल्लेख किया गया है, एक अतिरिक्त अल्पविराम होने से एक त्रुटि हुई।

आईई 7.0 में भी, एक पंक्ति के अंत में अर्धविराम नहीं होने के कारण त्रुटि हुई। यह सफारी और क्रोम में ठीक काम करता है (कंसोल में कोई त्रुटि नहीं है)।


2

IE7 नए ब्राउज़रों की तुलना में बहुत कम क्षमाशील है, खासकर क्रोम। मुझे इन बग्स को खोजने के लिए JSLint का उपयोग करना पसंद है । यह इन अनुचित रूप से रखे गए अल्पविरामों को, अन्य चीजों के बीच मिलेगा। आप शायद अनुचित व्हाट्सएप को अनदेखा करने के विकल्प को सक्रिय करना चाहेंगे।

अनुचित रूप से रखे गए अल्पविरामों के अलावा, इस ब्लॉग पर टिप्पणियों में किसी ने सूचना दी:

मैं एक त्रुटि का शिकार हो रहा हूं जिसने केवल "आईई (7) में" अपेक्षित पहचानकर्ता "कहा है। मेरे शोध ने मुझे इस पृष्ठ तक पहुँचाया। कुछ हताशा के बाद, यह पता चला कि समस्या है कि मैंने एक आरक्षित नाम का उपयोग फ़ंक्शन नाम ("स्विच") के रूप में किया है। यह त्रुटि स्पष्ट नहीं थी और यह गलत लाइन नंबर की ओर इशारा करती है।


1

अवांछित निकालें, फ़ंक्शन में साइन इन करें। आपको समाधान मिल जाएगा।

इसे देखें

http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/


आप समाधान सही कर रहे हैं, मैंने आपको -1 डाउनवोट को खत्म करने के लिए उकसाया था। यकीन नहीं होता कि कोई सही जवाब क्यों देगा।
— अंकुशमाता

1

यह त्रुटि तब होती है जब हम सरणी के अंत में या फ़ंक्शन कोड में एक कॉमा को हटाने के लिए जोड़ते हैं या चूक जाते हैं। ऐसी त्रुटि के लिए वेब पेज के पूरे कोड का निरीक्षण करना आवश्यक है।

मुझे फेसबुक ऐप कोड में मिला, जबकि मैं फेसबुक एपीआई के लिए कोडिंग कर रहा था।

<div id='fb-root'>
    <script type='text/javascript' src='http://connect.facebook.net/en_US/all.js'</script>
    <script type='text/javascript'>
          window.fbAsyncInit = function() {
             FB.init({appId:'".$appid."', status: true, cookie: true, xfbml: true});            
             FB.Canvas.setSize({ width: 800 , height: 860 , }); 
                                                       // ^ extra comma here
          };
    </script>

0

यह मेरे लिए एक स्क्रिप्ट की तरह लगता है जिसे src के साथ खींचा गया था, और सिर्फ आधे रास्ते पर लोड किया गया था, जिसके कारण एक सिंटैक्स त्रुटि साइन शेष शेष नहीं भरी हुई है।


0

IE7 में ऑब्जेक्ट के सरणियों के साथ समस्या है

columns: [
{
  field: "id",
  header: "ID"
},
{
  field: "name",
  header: "Name" , /* this comma was the problem*/ 
},
...

0

इस बग की एक और विविधता: मेरे पास 'जारी' नाम का एक फ़ंक्शन था और चूंकि यह एक आरक्षित शब्द है, इसलिए इस त्रुटि को फेंक दिया। मुझे अपने कार्य का नाम बदलकर 'जारी रखना' करना पड़ा


0

हो सकता है कि आपको एक विधि 'कंस्ट्रक्टर' वाली वस्तु मिल गई है और उस एक को लागू करने का प्रयास करें।


0

नॉकआउट जेएस का उपयोग करते समय आप इस समस्या को मार सकते हैं। यदि आप वर्ग विशेषता सेट करने का प्रयास करते हैं तो नीचे दिए गए उदाहरण की तरह यह विफल हो जाएगा:

<span data-bind="attr: { class: something() }"></span>

इस तरह वर्ग स्ट्रिंग से बच:

<span data-bind="attr: { 'class': something() }"></span>

मेरे 2 सेंट।


0

मैं भी इस मुद्दे पर आया था। मुझे दो समाधान नीचे मिले। 1)। जैसा कि ऊपर दूसरों ने बताया है, JSON ऑब्जेक्ट से अतिरिक्त अल्पविराम हटा दें। 2)। इसके अलावा, मेरा JSP / HTML चल रहा था। इस वजह से यह ब्राउज़र के पुराने मोड को ट्रिगर कर रहा था जो अतिरिक्त कॉमा के लिए JS त्रुटि दे रहा था। जब इसका उपयोग किया जाता है तो यह ब्राउजर के एचटीएमएल 5 मोड (यदि समर्थित हो) को ट्रिगर करता है और यह एक्स्ट्रा कोमा के साथ भी ठीक काम करता है, जैसे कि किसी भी अन्य ब्राउजर जैसे एफए, क्रोम आदि।


1
ढेर अतिप्रवाह में आपका स्वागत है! क्या आप इसका उदाहरण दे सकते हैं: "मेरा JSP / HTML चल रहा था।"
— ब्रीचरहार्ड्स

0

यहाँ समस्या को डीबग करने की एक आसान तकनीक है: स्क्रिप्ट / कोड को कंसोल से बाहर निकालें। कंसोल से कोड को अपने IDE में कॉपी करें। अधिकांश IDE कोड पर त्रुटि जाँच करते हैं और त्रुटियों को उजागर करते हैं। आपको अपने जावास्क्रिप्ट / HTML संपादक में लगभग तुरंत त्रुटि देखने में सक्षम होना चाहिए।


0

एक अलग विन्यास के साथ एक ही मुद्दा था। यह कोणीय कारखाने की परिभाषा में था, लेकिन मुझे लगता है कि यह कहीं और भी हो सकता है:

angular.module("myModule").factory("myFactory", function(){
    return
    {
        myMethod : function() // <--- error showing up here
        {
            // method definition
        } 
    }
});

फिक्स बहुत विदेशी है:

angular.module("myModule").factory("myFactory", function(){
    return { // <--- notice the absence of the return line
        myMethod : function()
        {
            // method definition
        } 
    }
});

0

यदि आप किसी वर्ग के अंदर कहीं भी फ़ंक्शन कहते हैं, तो यह टाइपस्क्रिप्ट में भी हो सकता है। उदाहरण के लिए

class Dojo implements Sensei {
     console.log('Hi'); // ERROR Identifier expected.
     constructor(){}
}

फ़ंक्शन कॉल, जैसे console.log()फ़ंक्शन के अंदर होना चाहिए। उस क्षेत्र में नहीं जहां आपको वर्ग क्षेत्र घोषित करना चाहिए।


0

Windows समस्या के लिए टाइपस्क्रिप्ट

यह IE, क्रोम, FF में काम करता है

export const OTP_CLOSE = { 'outcomeCode': 'OTP_CLOSE' };

यह क्रोम, एफएफ, आईई 11 में काम नहीं करता है

export const OTP_CLOSE = { outcomeCode: 'OTP_CLOSE' };

मुझे लगता है कि यह किसी भी तरह विंडोज आरक्षित शब्दों से संबंधित हैयहां छवि विवरण दर्ज करें


0

मुझे यह त्रुटि आई, जहां एक अनुगामी अल्पविराम या कुछ इस तरह से, इस वाक्यविन्यास का उपयोग स्थिरांक में किया गया था। js

    var titles = {
      [title.X]: 'X title',
      [title.Y]: 'Y title'
    }

IE 11 को यह बिल्कुल पसंद नहीं आया।

जैसा कि पहले बताया गया है कि यह आसानी से उपयोग करके तय किया गया था

   var titles = {
     'title.X': 'X title',
     'title.Y': 'Y title'   
   }

2
ये समतुल्य भाव नहीं हैं। पहला title.X और title.Y गुणों के मान का उपयोग करता है जैसे कि टाइटल ऑब्जेक्ट में कुंजियाँ, दूसरा स्ट्रिंग्स "title.X" और "title.Y" को कुंजियों के रूप में उपयोग करता है।
— नवंबर को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.