पदार्थ और पदार्थ के बीच अंतर क्या है?


844

के बीच क्या अंतर है

alert("abc".substr(0,2));

तथा

alert("abc".substring(0,2));

वे दोनों "ab" आउटपुट करने लगते हैं।


13
@Derek 會 會, नोट, substring क्रोम के सभी अन्य लोगों को देर से आउटपरफॉर्म करता है।
स्टीवन लू

4
@Derek टिप्पणी करने पर जोड़ रहा है ... के विपरीत sliceविधि, substringनकारात्मक मापदंडों के लिए समायोजन संभाल नहीं करता है।
डेज़िमास ज़विर्ब्लिस

1
मुझे लगता है कि अधिक महत्वपूर्ण सवाल यह है कि "जावास्क्रिप्ट में एक substrविधि और एक substringविधि दोनों क्यों है "? यह वास्तव में ओवरलोडिंग का पसंदीदा तरीका है?
सिनजाई

7
आज के रूप में, MDN के बारे में एक बड़ी लाल चेतावनी है substr()कि आप यहां डॉक्स पृष्ठ के शीर्ष पर "छद्म-पदावनत" कह सकते हैं: developer.mozilla.org/en-US/docs/Web/JavaScript-Reference/… - किसी को भी इस बारे में अधिक जानकारी है, जैसे कोई ब्राउज़र है कि वास्तव में बहिष्कार करने की योजना बना रहा है substr()भविष्य में किसी भी बिंदु पर? या जैसा कि स्टीवन लू ने सुझाव दिया, substr()आगे बढ़ने का उपयोग करने के लिए प्रदर्शन के नुकसान हो सकते हैं?
जाम

जवाबों:


930

अंतर दूसरे तर्क में है। दूसरा तर्क यह substringहै कि सूचकांक (जिसे शामिल नहीं किया जाए) पर रोक दिया जाए, लेकिन दूसरा तर्क substrवापसी की अधिकतम लंबाई है।

लिंक?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring


61
त्रुटि के एक आम स्रोत की तरह लगता है। अंतर जानने के लिए अच्छा है। इसके बारे में अतिरिक्त टिप्पणियां यहां मिलीं
schnaader

3
@ पावेल भी जब आप इसे स्ट्रिंग के अंत में चाहते हैं (कोई दूसरा तर्क नहीं)
एंड्रे चल्लेला

यह बहुत हास्यास्पद है कि मैं जावा एप्लेट विकसित करने के दिनों को याद कर रहा हूं। ('लगभग', क्योंकि हमें आईई के बारे में चिंता करनी थी।)
माइकल शीपर

2
आपको पहले तर्क पर अंतर का भी उल्लेख करना चाहिए, जो कि पदार्थ के लिए नकारात्मक हो सकता है (जिस स्थिति में यह अंत से शुरू होता है), लेकिन प्रतिस्थापन के लिए नहीं। जेफ़रएमसी जवाब देखें, लेकिन इसमें इतने कम वोट हैं कि बहुत से लोग इस महत्वपूर्ण हिस्से को याद कर सकते हैं।
यूएन

2
जैसा कि यह अब तक का सबसे उत्कीर्ण उत्तर है, इसे संभवतः शामिल करने के लिए संपादित किया जाना चाहिए String.prototype.substr()... (यह ECMA-262 मानक के अनुलग्नक बी में परिभाषित किया गया है , जिसका परिचय बताता है: "... प्रोग्रामर का उपयोग नहीं करना चाहिए या मान नहीं करना चाहिए" नए ECMAScript कोड लिखते समय इन सुविधाओं और व्यवहारों का अस्तित्व ... ")
TS

309

substring( MDN ) के रूप में पैरामीटर लेता है (from, to)
substr( MDN ) के रूप में पैरामीटर लेता है (from, length)

अपडेट : एमडीएन substrविरासत मानता है।

alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"

आप याद कर सकते हैं कि substringसूचकांक लेता है, जैसा कि एक और स्ट्रिंग निष्कर्षण विधि, स्लाइस

0 से शुरू करने पर आप या तो विधि का उपयोग कर सकते हैं।


140
.substring()सूचकांक लेता है। आप याद रख सकते हैं क्योंकि यह नाम में केवल एक 'i' है। .slice()सूचकांक भी लेता है।
कोलिन

10
@ कोल्लिन, कि मैं के बारे में टिप्पणी करता है और निश्चित रूप से उत्तर में स्थानांतरित किया जाना चाहिए!
MyDaftQuestions

35

जैसा कि yatima2975 के उत्तर में संकेत दिया गया है, एक अतिरिक्त अंतर है:

substr()स्ट्रिंग के अंत से ऑफसेट के रूप में एक नकारात्मक प्रारंभिक स्थिति को स्वीकार करता है। substring()नहीं करता।

से MDN :

यदि प्रारंभ ऋणात्मक है, तो पदार्थ () स्ट्रिंग के अंत से एक चरित्र सूचकांक के रूप में उपयोग करता है।

तो कार्यात्मक अंतर को योग करने के लिए:

substring(begin-offset, end-offset-exclusive)जहां से शुरू-ऑफसेट 0या अधिक है

substr(begin-offset, length) जहां शुरू-ऑफसेट भी नकारात्मक हो सकता है


25

हाल ही में आई एक अन्य गेटचा यह है कि IE 8 में, "abcd".substr(-1)ग़लती से वापस आ जाता है "abcd", जबकि फ़ायरफ़ॉक्स 3.6 को वापस लौटना "d"चाहिए। sliceदोनों पर सही ढंग से काम करता है।

इस विषय पर अधिक जानकारी यहाँ मिल सकती है


17

मुख्य अंतर यह है कि

पदार्थ () आपको अधिकतम लंबाई निर्दिष्ट करने की अनुमति देता है

प्रतिस्थापन () आपको सूचकांकों को निर्दिष्ट करने की अनुमति देता है और दूसरा तर्क समावेशी नहीं है

पदार्थ () और सबस्ट्रिंग () के बीच कुछ अतिरिक्त सूक्ष्मताएं हैं जैसे कि समान तर्कों और नकारात्मक तर्कों की हैंडलिंग। यह भी ध्यान दें कि सबस्ट्रिंग () और स्लाइस () समान हैं लेकिन हमेशा समान नहीं होती हैं।

  //*** length vs indices:
    "string".substring(2,4);  // "ri"   (start, end) indices / second value is NOT inclusive
    "string".substr(2,4);     // "ring" (start, length) length is the maximum length to return
    "string".slice(2,4);      // "ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
    "string".substring(3,2);  // "r"    (swaps the larger and the smaller number)
    "string".substr(3,2);     // "in"
    "string".slice(3,2);      // ""     (just returns "")

  //*** negative second argument:
    "string".substring(2,-4); // "st"   (converts negative numbers to 0, then swaps first and second position)
    "string".substr(2,-4);    // ""
    "string".slice(2,-4);     // ""

  //*** negative first argument:
    "string".substring(-3);   // "string"        
    "string".substr(-3);      // "ing"  (read from end of string)
    "string".slice(-3);       // "ing"        

आप के लिए उपयोगी "नकारात्मक दूसरा तर्क" याद आया slice:"string".slice(2,-2); // "ri"
पॉल

8

अंतर दूसरा पैरामीटर है। उनके दूसरे पैरामीटर, जबकि दोनों संख्याएं, दो अलग-अलग चीजों की उम्मीद कर रही हैं:

दूसरे पैरामीटर के विकल्प का उपयोग करते समय शामिल न करने वाला पहला सूचकांक है:

var s = "string";
s.substring(1, 3); // would return 'tr'

var s = "another example";
s.substring(3, 7); // would return 'ther'

मूल का उपयोग करते समय दूसरा पैरामीटर प्रतिस्थापन में शामिल करने के लिए वर्णों की संख्या है:

var s = "string";
s.substr(1, 3); // would return 'tri'

var s = "another example";
s.substr(3, 7); // would return 'ther ex'

5

बड़ा अंतर यह substr()है कि एक पदावनत विधि है जो अभी भी इस्तेमाल की जा सकती है, लेकिन सावधानी के साथ इस्तेमाल की जानी चाहिए क्योंकि उन्हें भविष्य में पूरी तरह से हटाए जाने की उम्मीद है। आपको अपने कोड से उनके उपयोग को हटाने के लिए काम करना चाहिए। और substring()विधि सफल हुई और पूर्व को निर्दिष्ट किया गया।


2
क्या आप एक विश्वसनीय स्रोत की ओर इशारा कर सकते हैं, जो के अपचयन को इंगित करता है substr()? मैंने इसे कई लोगों से पढ़ा है, लेकिन मैं इस कथन का समर्थन करने वाली वेब पर कोई जानकारी नहीं पा सकता। इसके अलावा, मोज़िला इसे पदावनत / अप्रचलित विशेषताओं की सूची में शामिल नहीं करता है: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
डैनियलएम

@DanielM जहाँ तक मुझे याद है, जब मैंने यह उत्तर पोस्ट किया था, तब यह पदावनत हो गया था, हो सकता है कि लेख बदल गया हो और अब इसे पदावनत (लेकिन निश्चित नहीं है) .. लेकिन फिर भी कुछ लेखों जैसे sstut.com/javitcript/substring- में रिकॉर्ड किया गया method.php को पदावनत किया गया।
5ervant

3
@ डैनियलएम String.prototype.substr()को ईसीएमए -262 मानक के एनेक्सी बी में परिभाषित किया गया है , जिसका परिचय बताता है: "... नए ईसीएमएस्क्रिप्ट कोड लिखते समय प्रोग्रामर को इन सुविधाओं और व्यवहारों के अस्तित्व का उपयोग नहीं करना चाहिए या नहीं करना चाहिए ..."
टीएस

@TS substr()को वास्तव में कुछ दस्तावेजों पर पदावनत बताया गया है।
5ervant

2
यह आज की तरह एक स्वीकृत उत्तर होना चाहिए। जब कोई विकल्प हो तो विरासत के कार्यों का उपयोग करना अच्छे कोड का विकल्प नहीं है। कृपया इस उत्तर को आगे बढ़ाएं ताकि Google इस पृष्ठ पर आगे बढ़ सके।
वबजनर

4

स्लाइस बनाम सबस्ट्रेट बनाम सबस्ट्रिंग बनाम [] तरीके

इन जावास्क्रिप्ट विधियों में से प्रत्येक के लिए प्रदर्शन लाभ हैं। कृपया इन कार्यों का उपयोग करें।


9
यह उत्तर बेहतर होगा यदि इसमें कुछ सारांश पाठ शामिल किए गए हैं जैसे कि लिंक किए गए प्रदर्शन लाभों के निष्कर्ष, कृपया।
2540625

3

सबस्ट्रिंग (): इसके 2 पैरामीटर "स्टार्ट" और "एंड" हैं।

  • शुरू पैरामीटर की आवश्यकता है और उस स्थिति को निर्दिष्ट करता है जहां निष्कर्षण शुरू करना है।
  • एंड पैरामीटर वैकल्पिक है और उस स्थिति को निर्दिष्ट करता है जहां निष्कर्षण समाप्त होना चाहिए।

यदि अंतिम पैरामीटर निर्दिष्ट नहीं है, तो स्ट्रिंग के अंत तक प्रारंभ स्थिति से सभी वर्ण निकाले जाते हैं।

var str = "Substring Example";
var result = str.substring(0, 10);
alert(result);

Output : Substring

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

var str = "Substring Example";
var result = str.substring(10, 0);
alert(result);

Output : Substring

पदार्थ () : इसके 2 मानदंड "प्रारंभ" और "गणना" हैं।

  • स्टार्ट पैरामीटर की आवश्यकता है और उस स्थिति को निर्दिष्ट करता है जहां निष्कर्षण शुरू करना है।

  • गणना पैरामीटर वैकल्पिक है और वर्णों की संख्या निकालने के लिए निर्दिष्ट करता है।

var str = "Substr Example";
var result = str.substr(0, 10);
alert(result);


Output : Substr Exa

यदि गणना पैरामीटर निर्दिष्ट नहीं है, तो स्ट्रिंग के अंत तक प्रारंभ स्थिति से सभी वर्ण निकाले जाते हैं। यदि गिनती 0 या ऋणात्मक है, तो एक खाली स्ट्रिंग लौटा दी जाती है।

var str = "Substr Example";
var result = str.substr(11);
alert(result);

Output : ple


2

सबरिंग (startIndex, endIndex (शामिल नहीं))

पदार्थ (शुरुआती, कितने अक्षर)

const string = 'JavaScript';

console.log('substring(1,2)', string.substring(1,2)); // a
console.log('substr(1,2)', string.substr(1,2)); // av
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.