web-dev-qa-db-fra.com

La confusion à propos de la fonction split () de JavaScript

D'abord, je définis une variable et la mets à vide:

var str = "";

Ensuite, je l'ai divisé en "&":

var strs = str.split('&');

En fin de compte, je montre la longueur de strs:

alert( strs.length);

Il alerte "1".

Mais je n'attribue rien à la variable 'str'. Pourquoi a-t-il encore une longueur, ne devrait-il pas être nul?

30
hh54188

Du centre de documentation du MDC:

Remarque: Lorsque la chaîne est vide, split renvoie un tableau contenant une chaîne vide, plutôt qu'un tableau vide.

Lisez la documentation complète ici: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

En d'autres termes, c'est par conception, et non une erreur :)

51
Martin Jespersen

Parce que vous obtenez un tableau contenant la chaîne vide:

[ "" ]

Cette chaîne vide est un élément. Donc length est 1.

8
BoltClock

Division de window.location.pathname

Notez que lors du fractionnement de window.location.pathname, il retournera généralement une longueur de +1 également.

Supposons que notre chemin dans ce cas est: /index.html.

var str = window.location.pathname.split('/');

Il sera scindé en ["" , "index.html"] de par sa conception, comme mentionné plusieurs fois auparavant.

Ce que l’on pourrait faire dans ce cas est d’éliminer le / début et fin comme suit:

var str = window.location.pathname.replace(/^\/|\/$/g, '').split('/');

et se retrouver avec la longueur "correcte" ed.

5
mahatmanich

La description

La méthode split renvoie le nouveau tableau .

Une fois trouvé, le séparateur est supprimé de , La chaîne et les sous-chaînes sont Renvoyés dans un tableau. Si le séparateur est omis de , Le tableau contient un élément Composé de la chaîne entière .

Remarque: lorsque la chaîne est vide, split renvoie un tableau contenant une chaîne vide , Plutôt qu'un tableau vide .

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

3
jAndy

J'en ai eu marre de toujours chercher un [0] == '' alors:

String.prototype.splitPlus = function(sep) {
  var a = this.split(sep)
  if (a[0] == '') return [];
  return a;
};

Version corrigée pour laquelle l'élément 1 peut être null:

 String.prototype.splitPlus = function(sep) {
   var a = this.split(sep)
   if (a[0] == '' && a.length == 1) return [];
   return a;
  };
0
Brian McGinity

JavaScript split crée un tableau. En d’autres termes, votre variable, strs = [0]=>"" et sa longueur est 1.

0
KoolKabin