උපස්ථරය සහ උපස්ථරය අතර වෙනස කුමක්ද?


862

අතර ඇති වෙනස කුමක්ද?

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

සහ

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

ඔවුන් දෙදෙනාම “ab” ප්‍රතිදානය කරන බව පෙනේ.



4
@ ඩෙරෙක් අදහස් දැක්වීමට එකතු කිරීම ... sliceක්‍රමය මෙන් නොව, negative ණ substringපරාමිතීන් සඳහා වන ගැලපීම් හසුරුවන්නේ නැත.
Dzeimsas Zvirblis

1
මම හිතන්නේ වඩා වැදගත් ප්‍රශ්නය වන්නේ "ජාවාස්ක්‍රිප්ටයට substrක්‍රමයක් සහ substringක්‍රමයක් ඇත්තේ ඇයි" යන්නයි. මෙය ඇත්ත වශයෙන්ම වැඩිපුර පැටවීමේ ක්‍රමයද?
සින්ජයි

7
අද වන විට, ඩොක්ස් substr()පිටුවේ ඉහළින්ම “ව්‍යාජ-අවලංගු කරන ලද” ලෙස හැඳින්විය හැකි බවට එම්ඩීඑන් වෙත විශාල රතු අනතුරු ඇඟවීමක් ඇත: developper.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - යමෙකුට මේ පිළිබඳව වැඩි විස්තර තිබේද, උදා: substr()අනාගතයේ ඕනෑම අවස්ථාවක ඇත්ත වශයෙන්ම අවලංගු කිරීමට සැලසුම් කරන බ්‍රව්සරයක් තිබේද? නැතහොත් ස්ටීවන් ලූ යෝජනා කළ පරිදි, substr()ඉදිරියට යාමේ කාර්ය සාධන අවාසි තිබිය හැකිද?
jamess

Answers:


952

වෙනස දෙවන තර්කයේ ඇත. දෙවන තර්කය 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
දෝෂයේ පොදු ප්‍රභවයක් සේ පෙනේ. වෙනස දැන ගැනීම සතුටක්. මේ පිළිබඳ අමතර අදහස් මෙතැනින් හමු විය: rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring
schnaader

3
Aw පවෙල් ද ඔබට එය අවශ්‍ය වන විට (දෙවන තර්කයක් නැත)
ඇන්ඩ්‍රේ චලෙල්ලා

මෙය කොතරම් හාස්‍යජනකද යත්, ජාවා ඇප්ලෙට් නිපදවීමේ දින මට බොහෝ දුරට මග හැරී ඇත. ( 'පාහේ', අපි එදා IE ගැන කරදර නිසා ය.)
මයිකල් Scheper

3
පළමු තර්කයේ වෙනස ද ඔබ සඳහන් කළ යුතු අතර එය උපස්ථරයට negative ණ විය හැකිය (එය අවසානයේ සිට ආරම්භ වේ), නමුත් උපස්ථර සඳහා නොවේ. ජෙෆර්එම්සී පිළිතුර බලන්න, නමුත් එයට අඩු ඡන්ද ප්‍රමාණයක් ඇති බැවින් බොහෝ දෙනෙකුට මෙම වැදගත් කොටස මග හැරෙනු ඇත.
ඔබ

2
මෙම වඩා ඉතාමත් upvoted පිළිතුර ලෙස, එය බොහෝ විට එම ඇතුළත් කිරීමට සංස්කරණය කළ යුතුය String.prototype.substr()ප්රතික්ෂේප කරයි ... (එය අර්ථ දක්වා ඇත ඇමුණුම බී ලක්වූ ECMA-262 සම්මත, ක හඳුන්වා මෙසේ සඳහන් වෙනවා: "... වැඩසටහන් භාවිතා හෝ නොසිතිය යුතුයි නව ECMAScript කේතයක් ලිවීමේදී මෙම ලක්ෂණ සහ හැසිරීම් වල පැවැත්ම…. ”)
TS

314

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 සිට ආරම්භ කරන විට ඔබට එක් ක්‍රමයක් භාවිතා කළ හැකිය.


142
.substring()දර්ශක ගනී. ඔබට මතක ඇති එය නාමයේ 'මම' ඇති එකම එක නිසා. .slice()දර්ශක ද ගනී.
කොලින්

10
ol කොලින්, i පිළිබඳ එම ප්‍රකාශය සහ ඇඟවුම් නිසැකවම පිළිතුරට ගෙන යා යුතුය!
MyDaftQuestions

37

යතිමා 2975 හි පිළිතුරේ ඉඟි කර ඇති පරිදි, අමතර වෙනසක් ඇත:

substr()string ණ ආරම්භක ස්ථානයක් නූලේ කෙළවරේ සිට ඕෆ්සෙට් එකක් ලෙස පිළිගනී. substring()නැහැ.

MDN වෙතින් :

ආරම්භය negative ණ නම්, උපස්ථරය () එය නූල් අවසානයේ සිට අක්ෂර දර්ශකයක් ලෙස භාවිතා කරයි.

එබැවින් ක්‍රියාකාරී වෙනස්කම් සාරාංශ කිරීමට:

substring(begin-offset, end-offset-exclusive)ආරම්භක ඕෆ්සෙට් 0හෝ ඊට වැඩි නම්

substr(begin-offset, length) ආරම්භක ඕෆ්සෙට් ද .ණ විය හැකිය


25

මෑතකදී මට හමු වූ තවත් කරුණක් නම් IE 8 හි "abcd".substr(-1)වැරදි ලෙස ආපසු පැමිණෙන "abcd"අතර ෆයර්ෆොක්ස් 3.6 නැවත "d"පැමිණිය යුතුය. sliceදෙකම මත නිවැරදිව ක්රියා කරයි.

මෙම මාතෘකාව පිළිබඳ වැඩි විස්තර මෙහි සොයාගත හැකිය .


19

ප්රධාන වෙනස එයයි

නැවත පැමිණිය හැකි උපරිම දිග නියම කිරීමට substr () ඔබට ඉඩ දෙයි

substring () මඟින් දර්ශක නියම කිරීමට ඔබට ඉඩ ලබා දෙන අතර දෙවන තර්කය ඇතුළත් නොවේ

සමාන තර්ක හා negative ණාත්මක තර්ක හැසිරවීම වැනි උපස්ථර () සහ උපස්ථර () අතර අමතර සියුම් කරුණු තිබේ. තවද උපස්ථර () සහ පෙත්ත () සමාන නමුත් සෑම විටම සමාන නොවේ.

  //*** 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"        

පහත දැක්වෙන ප්‍රයෝජනවත් “negative ණාත්මක දෙවන තර්කය” ඔබට මග හැරුණි 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'

6

විශාල වෙනසක් වේ substr()යනු අතහැර ක්රමය තවමත් භාවිතා කළ හැකි බව, නමුත් ඔවුන් සම්පූර්ණයෙන්ම ටික අනාගතයේ දී ඉවත් කිරීමට අපේක්ෂා කරන නිසා පරෙස්සමින් භාවිත කළ යුතු ය. ඔබේ කේතයෙන් ඒවායේ භාවිතය ඉවත් කිරීමට ඔබ වැඩ කළ යුතුය. මෙම substring()ක්‍රමය සාර්ථක වූ අතර කලින් සඳහන් කළ ක්‍රමය නියම කළේය.


2
ක්ෂය වීම පෙන්නුම් කරන විශ්වාසදායක ප්‍රභවයක් වෙත යොමු කළ හැකිද substr()? මම එය කිහිප දෙනෙකුගෙන් කියවා ඇත්තෙමි, නමුත් ප්‍රකාශයට සහාය දක්වන කිසිදු තොරතුරක් වෙබයේ මට සොයාගත නොහැක. : ප්ලස්, මොසිල්ලා නොසලකා හරිනු / යල් පැන ගිය ලක්ෂණ ලැයිස්තුව මත ඇතුලත් නැත developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
DanielM

An ඩැනියෙල්ම් මට මතක ඇති පරිදි, මම මෙම පිළිතුර පළ කරන විට එය අවලංගු විය, සමහර විට ලිපිය වෙනස් වී ඇති අතර එය දැන් අතහැර දමා නැත (නමුත් විශ්වාස නැත) .. නමුත් තවමත් sstut.com/javascript/substring- වැනි සමහර ලිපි වල සටහන් වී ඇත. method.php අතහැර දැමූ පරිදි.
සර්වන්ට්

3
@ ඩැනියෙල්එම් String.prototype.substr()යනු ECMA-262 ප්‍රමිතියේ ඇමුණුම B හි අර්ථ දක්වා ඇති අතර , එහි හැඳින්වීමෙහි මෙසේ සඳහන් වේ: “… නව ECMAScript කේතය ලිවීමේදී ක්‍රමලේඛකයින් මෙම අංග සහ හැසිරීම් වල පැවැත්ම භාවිතා කිරීම හෝ උපකල්පනය කිරීම නොකළ යුතුය.…”
TS

substr()සමහර ලියකියවිලි වලංගු නොවන ලෙස @TS සැබවින්ම සටහන් වේ.
සර්වන්ට්

2
මෙය අද වන විට පිළිගත් පිළිතුර විය යුතුය. විකල්පයක් ඇති විට පැරණි කාර්යයන් භාවිතා කිරීම හොඳ කේතයක් සඳහා විකල්පයක් නොවේ. ගූගල් මෙම පිටුවට මඟ පෙන්වන බැවින් කරුණාකර මෙම පිළිතුර වඩාත් දෘශ්‍යමාන කිරීමට කරුණාකර උත්තර දෙන්න.
vbezhenar

5

substring (): එයට "ආරම්භය" සහ "අවසානය" යන පරාමිති 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

substr () : එයට "ආරම්භය" සහ "ගණන් කිරීම" යන පරාමිති 2 ක් ඇත.

  • ආරම්භක පරාමිතිය අවශ්‍ය වන අතර නිස්සාරණය ආරම්භ කළ යුතු ස්ථානය නියම කරයි.

  • ගණන් පරාමිතිය අත්‍යවශ්‍ය නොවන අතර උපුටා ගැනීම සඳහා අක්ෂර ගණන නියම කරයි.

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


Output : Substr Exa

ගණන් පරාමිතිය නිශ්චිතව දක්වා නොමැති නම්, ආරම්භක ස්ථානයේ සිට නූල් අවසානය දක්වා සියලුම අක්ෂර උපුටා ගනු ලැබේ. ගණන් කිරීම 0 හෝ negative ණ නම්, හිස් නූලක් ආපසු දෙනු ලැබේ.

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

Output : ple


4

පෙත්ත එදිරිව Substr එදිරිව Substring vs [] ක්‍රම

මෙම එක් එක් ජාවාස්ක්‍රිප්ට් ක්‍රමයට කාර්ය සාධන ප්‍රතිලාභ ඇත. කරුණාකර ඒ අනුව මෙම කාර්යයන් භාවිතා කරන්න.


9
කරුණාකර සම්බන්ධිත කාර්යසාධන ප්‍රතිලාභ සොයා ගැනීම් සඳහා මෙහි සාරාංශ පෙළ කිහිපයක් ඇතුළත් කර ඇත්නම් මෙම පිළිතුර වඩා හොඳය.
2540625

සබැඳිය දැන් මිය ගොස් ඇත.
ජෝර්ජ් සී

2

උපස්ථරය (startIndex, endIndex (ඇතුළත් කර නැත))

substr (startIndex, අක්ෂර කීයක්)

const string = 'JavaScript';

console.log('substring(1,2)', string.substring(1,2)); // a
console.log('substr(1,2)', string.substr(1,2)); // av
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.