Quelle est la différence entre la Chaîne.tranche et de la Corde.sous-chaîne?
Personne ne sait quelle est la différence entre ces deux méthodes:
String.prototype.slice
String.prototype.substring
- C'est un exemple de la mauvaise conception de JavaScript que nous nous sommes retrouvés avec trois méthodes que tous font la même chose, mais avec d'autres bizarreries. OMI
slice
est celui avec le moins de comportements inattendus. - L'OMI sous-chaîne lorsqu'elle est utilisée pour prendre une sous-chaîne à partir idx jusqu'à la fin est plus compréhensible en un coup d'œil. Surtout pour les noobs
- Selon ce site,
slice
peut réellement remplacersubstring
et il n'y a pas de raison de l'utiliser. - Le
slice
&substring
méthodes sont toutes plus le même, sauf que lesslice()
accepte un indice négatif, par rapport à la fin de la chaîne, mais pas lesubstring
, il jetteout-of-bound
erreur - Pas vrai du tout. Si vous essayez
var a = "asdf".substring(-1);
, il est considéré commevar a = "asdf".substring(0);
. Il n'y a aucune exception n'est levée. Et si vous utilisezvar a = "asdf".substring(2, -1);
, il utilise0
en place de-1
(comme avant), et les swaps, les arguments de sorte qu'il agit commevar a = "asdf".substring(0, 2);
. J'ai même essayé sur IE 8 et a obtenu les résultats sans exceptions - "J'ai même essayé sur IE 8" - j'aime la programmation.
Vous devez vous connecter pour publier un commentaire.
slice()
fonctionne commesubstring()
avec quelques comportements différents.Ce qu'ils ont en commun:
start
est égal àstop
: retourne une chaîne videstop
est omis: extraits de caractères à la fin de la chaîneDistinctions de
substring()
:start > stop
, puissubstring
échange de ces 2 arguments.NaN
, elle est traitée comme si elle était0
.Distinctions de
slice()
:start > stop
,slice()
retournera la chaîne vide. (""
)start
est négatif: jeux de caractères à partir de la fin de la chaîne, exactement commesubstr()
dans Firefox. Ce comportement est observé dans IE et Firefox.stop
est négatif: jeux de stop pour:string.length – Math.abs(stop)
(valeur d'origine), à l'exception délimitée à 0 (donc,Math.max(0, string.length + stop)
) dans les cas visés à l' Spécification ECMA.Source: Rudimentaire, l'Art de la Programmation & Développement: Javascript: substr() c. s. substring()
slice()
, il devrait êtrestring.length - stop
slice()
, je pense qu'il devrait être(string.length – 1) + stop
ou, pour le rendre clair que c'est négatif,(string.length – 1) – Math.abs(stop)
Array.slice
.substring
a toujours été là, donc, ils n'ont pas le casser et a ajouté une autre méthode. À peine une merde décision 1. la cohérence est gentil et 2. il permet de CoffeeScript du découpage de la syntaxe de travailler sur des tableaux et chaînes de caractères. @Oriol: édité dans.substring
permet interchangeables arguments.stop
sera mis àstring.length + stop
sistop
est négatif. Rappelez-vousstop
est l'indice après le dernier caractère extrait!substr
est incorrecte, selon SOCIÉTÉ: "Si le départ est négatif, substr() utilise comme un caractère d'index à partir de la fin de la chaîne. Si start est négatif et abs(start) est plus grande que la longueur de la chaîne, substr() utilise 0 comme l'index de début."string.length - Math.abs(stop)
. Rappelez-vous, faireslice(0, -1)
supprime uniquement le dernier char, alors que, selon votre note, il serait de supprimer les deux!"abc".slice(0, -1)
est égal à"ab"
, PAS"a"
que sa réponse indique.start > stop
,slice()
retournera la chaîne vide" est erroné. Par exemple:4 > -1
, mais"babayaga".slice(4, -1)
retourne"yag"
.Remarque: si vous êtes pressé, et/ou à la recherche de réponse courte défiler vers le bas de la réponse, et de lire les deux dernières lignes.si Pas pressé de lire la totalité de la chose.
permettez-moi de commencer par énoncer les faits:
Syntaxe:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Note #1:
slice()==substring()
Ce qu'il fait?
Le
slice()
méthode des extraits des parties d'une chaîne de caractères et renvoie les parties extraites dans une nouvelle chaîne de caractères.Le
substr()
méthode des extraits de parties d'une chaîne, en commençant au caractère à la position spécifiée et renvoie le nombre de caractères spécifié.Le
substring()
méthode des extraits des parties d'une chaîne de caractères et renvoie les parties extraites dans une nouvelle chaîne de caractères.Note #2:
slice()==substring()
Modifications de la Chaîne d'Origine?
slice()
N'est passubstr()
N'est passubstring()
N'est pasNote #3:
slice()==substring()
En utilisant les Nombres Négatifs comme Argument:
slice()
sélectionne des caractères à partir de la fin de la chaînesubstr()
sélectionne des caractères à partir de la fin de la chaînesubstring()
Ne pas EffectuerNote #3:
slice()==substr()
si le Premier Argument est Plus grand que le Second:
slice()
Ne pas Effectuersubstr()
depuis le Deuxième Argument n'est PAS une position, mais la longueur de la valeur, il fonctionnera comme d'habitude, pas de problèmessubstring()
échange les deux arguments, et procéder comme d'habitudele Premier Argument:
slice()
Obligatoire, indique: l'Indice de Départsubstr()
Obligatoire, indique: l'Indice de Départsubstring()
Obligatoire, indique: l'Indice de DépartNote n ° 4:
slice()==substr()==substring()
le Deuxième Argument:
slice()
En option, La position (jusqu'à, mais non compris) où à la fin de l'extractionsubstr()
En option, Le nombre de caractères à extrairesubstring()
En option, La position (jusqu'à, mais non compris) où à la fin de l'extractionNote n ° 5:
slice()==substring()
Que si le Deuxième Argument est Omis?
slice()
sélectionne tous les caractères de la start-position à la fin de la chaînesubstr()
sélectionne tous les caractères de la start-position à la fin de la chaînesubstring()
sélectionne tous les caractères de la start-position à la fin de la chaîneNote n ° 6:
slice()==substr()==substring()
ainsi, vous pouvez dire qu'il ya une différence entre
slice()
etsubstr()
, tandis quesubstring()
est essentiellement une copie deslice()
.en Résumé:
si vous connaissez l'index(la position) sur lequel vous allez vous arrêter (mais PAS inclure), l'Utilisation
slice()
si vous connaissez la longueur de l'extraction de caractères utiliser
substr()
.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 de tranche sont négatives, elles font référence à la chaîne à partir de la fin. Sous-chaîne et de substr ne marche pas.
Voici son article à propos de ce http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
'0123456789'.substr(-3, 2) -> '78'
La réponse est bien, mais nécessite un peu de lecture en. Surtout avec la nouvelle terminologie "stop".
Mon Aller-organisée par les différences de le rendre utile, en plus de la première réponse de Daniel ci-dessus:
1) des index négatifs. Sous-chaîne nécessite positif index et permettra de définir un indice négatif à 0. La tranche d'indice négatif signifie que la position à partir de la fin de la chaîne.
2) la Permutation des indices. Sous-chaîne va réorganiser les indices de faire le premier indice est inférieure ou égale à la deuxième indice.
--------------------------
Observation générale -- je trouve ça bizarre que le second indice est la position après le dernier caractère de la tranche ou la sous-chaîne. Je m'attends à "1234".tranche(2,2) pour revenir à "3". Cela rend Andy confusion au-dessus justifiée-je en droit d'attendre "1234".tranche(2, -1) pour revenir "34". Oui, cela signifie que je suis nouveau sur le Javascript. Cela signifie également ce problème:
Mon 2c.
La différence entre les sous-chaîne et de la tranche - est de savoir comment ils travaillent avec des négatifs et donnant sur des lignes à l'étranger arguments:
substring (début, fin)
Arguments négatifs sont interprétés comme zéro. Des valeurs trop importantes sont tronqués à la longueur de la chaîne:
alert ( "testme" .substring (-2)); //"testme", -2 devient 0
En outre, si démarrer > fin de compte, les arguments sont échangés, c'est à dire intrigue retours entre le début et la fin:
tranche
Les valeurs négatives sont mesurées à partir de la fin de la ligne:
Il est beaucoup plus pratique que la logique étrange de sous-chaîne.
Négative de la valeur 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, il sera tranche: arguments négatifs et il maintient et exploite la plus évidente.
La seule différence entre la tranche et de la sous-chaîne de la méthode est d'arguments
À la fois prendre deux arguments, par exemple, commencer à/de et de fin/d'.
Vous ne pouvez pas passer une valeur négative comme premier argument pour sous-chaîne méthode, mais pour tranche méthode de la traverser de bout.
Tranche argument d'une méthode de détails:
RÉF.:
http://www.thesstech.com/javascript/string_slice_method
Arguments
start_index
Index d'où la tranche devrait commencer. Si la valeur est fournie dans la négative, cela signifie commencer à partir de la dernière. par exemple, -1 pour le dernier caractère.
end_index
Indice après la fin de la tranche. Si elle ne vient pas de tranche seront prises à partir de start_index à la fin de la chaîne. En cas de valeur négative de l'indice sera mesurée à partir de la fin de la chaîne.
Sous-chaîne argument d'une méthode de détails:
REF: http://www.thesstech.com/javascript/string_substring_method
Arguments
de
Il doit être un entier non négatif pour spécifier l'index à partir d'où les sous-chaîne doit commencer.
à
Une option non entier négatif pour fournir de l'index avant de la sous-chaîne doit être terminé.
substr: C'est à nous d'aller chercher une partie de la chaîne basé sur l'index spécifié.
la syntaxe de substr-
chaîne de caractères.substr(début,fin)
start - démarrage de l'indice indique où la récupération de départ.
de bout en bout de l'index indique jusqu'où la chaîne extrait. C'est facultatif.
tranche: C'est pour récupérer une partie de la chaîne basé sur l'index spécifié. Il nous permet de spécifier positive et l'index.
la syntaxe de la tranche - chaîne.tranche(début,fin)
start - démarrage de l'indice indique où la récupération de départ.C'est
de bout en bout de l'index indique jusqu'où la chaîne extrait. C'est facultatif.
Dans "splice" à la fois début et de fin de l'index permet de prendre le positif et le négatif de l'indice.
exemple de code pour "tranche" dans la chaîne de
exemple de code pour "substring" dans la chaîne de
[*Note: négative de l'indexation commence à la fin de la chaîne.]
Pour
slice(start, stop)
, sistop
est négatif,stop
sera fixé à:plutôt que: