Quelqu'un sait-il quelle est la différence entre ces deux méthodes?
String.prototype.slice
String.prototype.substring
Quelqu'un sait-il quelle est la différence entre ces deux méthodes?
String.prototype.slice
String.prototype.substring
slice
est celle qui a le comportement le moins inattendu.slice
peut effectivement remplacersubstring
et il n'y a aucune raison de l'utiliser.var a = "asdf".substring(-1);
, c'est traité commevar a = "asdf".substring(0);
. Il n'y a aucune exception levée. Et si vous utilisezvar a = "asdf".substring(2, -1);
, il utilise0
à la place de-1
(comme avant) et échange les arguments pour qu'il agisse commevar a = "asdf".substring(0, 2);
. J'ai même essayé ces derniers sur IE 8 et obtenu les résultats sans exceptionRéponses:
slice()
fonctionne commesubstring()
avec quelques comportements différents.Ce qu'ils ont en commun:
start
égalstop
: renvoie une chaîne videstop
est omis: extrait les caractères à la fin de la chaîneDistinctions de :
substring()
start > stop
, alorssubstring
permutera ces 2 arguments.NaN
, il est traité comme s'il l'était0
.Distinctions de :
slice()
start > stop
,slice()
renverra la chaîne vide. (""
)start
est négatif: définit char à partir de la fin de la chaîne, exactement commesubstr()
dans Firefox. Ce comportement est observé à la fois dans Firefox et IE.stop
est négatif: définit l'arrêt sur:string.length – Math.abs(stop)
(valeur d'origine), sauf limité à 0 (doncMath.max(0, string.length + stop)
), comme indiqué dans la spécification ECMA .Source: Art rudimentaire de la programmation et du développement: Javascript: substr () vs substring ()
la source
slice()
, cela devrait êtrestring.length - stop
slice()
, je pense que cela devrait être(string.length – 1) + stop
ou, pour préciser que c'est négatif,(string.length – 1) – Math.abs(stop)
String.slice
été ajouté afin qu'il existe une méthode de chaîne cohérente avecArray.slice
.substring
a été là pour toujours, alors ils ne l'ont pas cassé et ont ajouté une autre méthode. À peine une décision merdique car 1. la cohérence est agréable et 2. elle permet à la syntaxe de découpage de CoffeeScript de fonctionner sur des tableaux et des chaînes. @Oriol: édité en.stop
sera réglé surstring.length + stop
sistop
est négatif. N'oubliez pas questop
c'est l'index après le dernier caractère extrait!Remarque: si vous êtes pressé et / ou recherchez une réponse courte, faites défiler jusqu'au bas de la réponse et lisez les deux dernières lignes. Si vous n'êtes pas pressé, lisez le tout.
permettez-moi de commencer par énoncer les faits:
Syntaxe:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Remarque n ° 1:
slice()==substring()
Ce qu'il fait?
La
slice()
méthode extrait des parties d'une chaîne et renvoie les parties extraites dans une nouvelle chaîne.La
substr()
méthode extrait des parties d'une chaîne en commençant par le caractère à la position spécifiée et renvoie le nombre de caractères spécifié.La
substring()
méthode extrait des parties d'une chaîne et renvoie les parties extraites dans une nouvelle chaîne.Note 2:
slice()==substring()
Modifie la chaîne d'origine?
slice()
Nesubstr()
fait passubstring()
nenote pas # 3:
slice()==substring()
Utilisation de nombres négatifs comme argument:
slice()
sélectionne les caractères à partir de la fin de la chaînesubstr()
sélectionne les caractères à partir de la fin de la chaînesubstring()
Ne fonctionne pasRemarque # 3:
slice()==substr()
si le premier argument est supérieur au second:
slice()
ne fonctionne passubstr()
car le deuxième argument n'est PAS une position, mais une valeur de longueur, il fonctionnera comme d'habitude, sans aucun problèmesubstring()
, échangera les deux arguments et fonctionnera comme d'habitudele Premier Argument:
slice()
Obligatoire, indique: Index de Démarragesubstr()
Obligatoire, indique: Index de Démarragesubstring()
Obligatoire, indique: Index de DémarrageNote # 4:
slice()==substr()==substring()
le deuxième argument:
slice()
facultatif, la position (jusqu'à, mais non compris) où terminer l'extractionsubstr()
facultative, le nombre de caractères à extrairesubstring()
facultatif, la position (jusqu'à, mais non inclus) où terminer l'extractionRemarque # 5:
slice()==substring()
Et si le deuxième argument est omis?
slice()
sélectionne tous les caractères de la position de début à la fin de la chaînesubstr()
sélectionne tous les caractères de la position de début à la fin de la chaînesubstring()
sélectionne tous les caractères de la position de début à la fin de la chaîneRemarque # 6:
slice()==substr()==substring()
Donc, vous pouvez dire qu'il y a une différence entre
slice()
etsubstr()
, alors qu'ilsubstring()
s'agit essentiellement d'une copie deslice()
.en résumé:
si vous connaissez l'index (la position) sur laquelle vous vous arrêterez (mais ne l'incluez pas), utilisez
slice()
si vous connaissez la longueur des caractères à extraire, utilisez
substr()
.la source
Ben Nadel a écrit un bon article à ce sujet, il souligne la différence dans les paramètres de ces fonctions:
Il souligne également que si les paramètres à découper sont négatifs, ils référencent la chaîne depuis la fin. La sous-chaîne et le substrat ne le font pas.
Voici son article à ce sujet.
la source
'0123456789'.substr(-3, 2) -> '78'
La seule réponse est très bien mais nécessite un peu de lecture. Surtout avec la nouvelle terminologie "stop".
My Go - organisé par différences pour le rendre utile en plus de la première réponse de Daniel ci-dessus:
1) indices négatifs. La sous-chaîne nécessite des index positifs et définira un index négatif à 0. L'index négatif de Slice signifie la position à partir de la fin de la chaîne.
2) Échange d'index. La sous-chaîne réorganisera les index pour rendre le premier index inférieur ou égal au deuxième index.
--------------------------
Commentaire général - Je trouve bizarre que le deuxième index soit la position après le dernier caractère de la tranche ou de la sous-chaîne. Je m'attendrais à ce que "1234" .slice (2,2) renvoie "3". Cela rend la confusion d'Andy ci-dessus justifiée - je m'attendrais à ce que "1234" .slice (2, -1) renvoie "34". Oui, cela signifie que je suis nouveau sur Javascript. Cela signifie également ce comportement:
Mon 2c.
la source
La différence entre la sous-chaîne et la tranche - est la façon dont ils fonctionnent avec les arguments négatifs et les lignes de vue à l'étranger:
sous-chaîne (début, fin)
Les arguments négatifs sont interprétés comme zéro. Des valeurs trop grandes sont tronquées à la longueur de la chaîne: alert ("testme" .substring (-2)); // "testme", -2 devient 0
De plus, si début> fin, les arguments sont échangés, c'est-à-dire que la ligne de tracé retourne entre le début et la fin:
tranche
Les valeurs négatives sont mesurées à partir de la fin de la ligne:
C'est beaucoup plus pratique que l'étrange sous-chaîne logique.
Une valeur négative du premier paramètre à substr pris en charge dans tous les navigateurs sauf IE8-.
Si le choix de l'une de ces trois méthodes, pour une utilisation dans la plupart des situations - ce sera tranche : arguments négatifs et il maintient et fonctionne le plus évident.
la source
substr: Il nous permet de récupérer une partie de la chaîne en fonction de l'index spécifié. syntaxe de substr- string.substr (start, end) start - l'index de départ indique où commence la récupération. end - end index indique jusqu'à où la chaîne est récupérée. C'est facultatif.
tranche: Il s'agit de récupérer une partie de la chaîne en fonction de l'index spécifié. Cela nous permet de spécifier positif et index. La syntaxe de slice - string.slice (start, end) start - start index indique où commence la récupération. L'indice end - end indique jusqu'à où la chaîne est récupérée. C'est facultatif. Dans «splice», les indices de début et de fin permettent de prendre des indices positifs et négatifs.
exemple de code pour «tranche» dans la chaîne
exemple de code pour «sous-chaîne» dans une chaîne
[* Remarque: l'indexation négative commence à la fin de la chaîne.]
la source
La seule différence entre la méthode slice et substring réside dans les arguments
Les deux prennent deux arguments, par exemple start / from et end / to.
Vous ne pouvez pas passer une valeur négative comme premier argument pour la méthode de sous-chaîne mais pour que la méthode de tranche la traverse de la fin.
Détails des arguments de la méthode Slice:
REF: http://www.thesstech.com/javascript/string_slice_method
Arguments
start_index Index à partir duquel la tranche doit commencer. Si la valeur est fournie en négatif, cela signifie commencer à partir du dernier. par exemple -1 pour le dernier caractère. end_index Index après la fin de la tranche. Si non fourni, la tranche sera prise de start_index à la fin de la chaîne. En cas de valeur négative, l'indice sera mesuré à partir de la fin de la chaîne.
Détails de l'argument de la méthode de sous-chaîne:
REF: http://www.thesstech.com/javascript/string_substring_method
Arguments
from Il doit s'agir d'un entier non négatif pour spécifier l'index à partir duquel la sous-chaîne doit commencer. to Un entier non négatif facultatif pour fournir un index avant lequel la sous-chaîne doit être terminée.
la source
Car
slice(start, stop)
, s'ilstop
est négatif,stop
sera réglé sur:plutôt que:
la source