Quelle est la différence entre
alert("abc".substr(0,2));
y
alert("abc".substring(0,2));
Ils semblent tous deux produire "ab".
Quelle est la différence entre
alert("abc".substr(0,2));
y
alert("abc".substring(0,2));
Ils semblent tous deux produire "ab".
La différence se situe au niveau du deuxième argument. Le deuxième argument de substring
est l'indice auquel il faut s'arrêter (sans l'inclure), mais le deuxième argument de la commande substr
est la longueur maximale à retourner.
Des liens ?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring
Cela semble être une source d'erreur commune. Il est bon de connaître la différence. J'ai trouvé d'autres commentaires à ce sujet ici : rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring
C'est tellement ridicule que je regrette presque l'époque où l'on développait des applets Java. ("Presque", parce que nous devions nous soucier d'IE à l'époque).
substr
( MDN ) prend les paramètres suivants (from, length)
.substring
( MDN ) prend les paramètres suivants (from, to)
.
Mise à jour : MDN considère substr
l'héritage.
alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"
Vous pouvez vous souvenir substr**i**ng
(avec un i ) prend i ndices, tout comme une autre méthode d'extraction de chaînes de caractères, sl i ce (avec un i ).
Lorsque vous partez de 0, vous pouvez utiliser l'une ou l'autre méthode.
Comme le laisse entendre la réponse de yatima2975, il existe une différence supplémentaire :
substr()
accepte une position de départ négative comme décalage par rapport à la fin de la chaîne. substring()
ne le fait pas.
Desde MDN :
Si start est négatif, substr() l'utilise comme un index de caractères à partir de l'adresse de départ. fin de la chaîne.
Donc, pour résumer les différences fonctionnelles :
substring(begin-offset, end-offset-exclusive)
où begin-offset est 0
ou plus
substr(begin-offset, length)
où begin-offset peut également être négatif
Un autre problème que j'ai rencontré récemment est celui d'IE 8, "abcd".substr(-1)
renvoie par erreur "abcd"
alors que Firefox 3.6 renvoie "d"
comme il se doit. slice
fonctionne correctement sur les deux.
Vous trouverez plus d'informations sur ce sujet aquí .
La principale différence est que
substr() vous permet de spécifier la longueur maximale à retourner.
substring() vous permet de spécifier les indices et le second argument n'est PAS inclusif.
Il existe quelques subtilités supplémentaires entre substr() et substring(), comme la gestion des arguments égaux et des arguments négatifs. Notez également que substring() et slice() sont similaires mais pas toujours identiques.
//*** 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"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
16 votes
@Derek Note,
substring
surpasse tous les autres sur Chrome ces derniers temps.4 votes
Pour compléter le commentaire de @Derek... Contrairement à la
slice
méthode,substring
ne gère pas l'ajustement pour les paramètres négatifs.2 votes
Je pense que la question la plus importante est "pourquoi JavaScript a à la fois une
substr
méthode et unsubstring
méthode" ? C'est vraiment la méthode préférée de surcharge ?8 votes
A partir d'aujourd'hui, MDN a un grand avertissement rouge à propos de
substr()
étant ce qu'on pourrait appeler "pseudo-déprécié" en haut de la page de documentation ici : developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/ - Quelqu'un a-t-il plus d'informations à ce sujet, par exemple, y a-t-il un navigateur qui prévoit de déprécier réellement lesubstr()
à tout moment dans le futur ? Ou, comme l'a suggéré Steven Lu, pourrait-il y avoir des inconvénients en termes de performance à utilisersubstr()
à l'avenir ?0 votes
@jamess A partir d'aujourd'hui, il n'y a pas d'avertissement.
1 votes
@codekandis c'est à la table inférieure : i.imgur.com/BHkYWHA.png