2011-03-02 14 views
24

Primero me puse una variable, y la ponga a vaciar:La confusión acerca de la función split() de JavaScript

var str = ""; 

Entonces se separaron a través de "&":

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

En el final, muestro strs 's longitud:

alert(strs.length); 

Se alertar a "1".

Pero no asigno nada a la variable 'str'. ¿Por qué todavía tiene una longitud, no debería ser cero?

Respuesta

40

Desde el centro doc MDC:

Nota: Cuando la cadena está vacía split, devuelve una matriz que contiene una cadena vacía, en lugar de una matriz vacía.

Leer los documentos completos aquí: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

En otras palabras, esto es mediante el diseño, y no un error :)

+0

1 enlace doc, tengo pereza por lo que no buscar primero :) – BoltClock

+3

Cuando sería esta 'opción de diseño' mejor que volver una matriz vacía? –

+3

Es por consistencia. ''&'. split ('&')' devuelve 2 cadenas vacías; ''&&'. split ('&')' devuelve 3; etc. –

8

Debido a que recibe una matriz que contiene la cadena vacía:

[ "" ] 

Esa cadena vacía es uno de los elementos. Así es length 1.

1

JavaScript split crea una matriz. Es decir, la variable, strs = [0]=>"" y su longitud es 1.

3

Descripción

El método split devuelve la nueva matriz.

Cuando se encuentra, el separador se elimina de la cadena y las subcadenas son devueltas en una matriz. Si el separador es omitido, la matriz contiene un elemento que consiste en la cadena completa .

Nota: Cuando la cadena está vacía, split devuelve una matriz que contiene una cadena vacía , en lugar de una matriz vacía.

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

5

División window.location.pathname

Tenga en cuenta que en la división window.location.pathname que en su mayoría se volverá una longitud de 1 también.

Supongamos que nuestra ruta en este caso es: /index.html.

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

se dividirá en ["" , "index.html"] por diseño, como se ha mencionado aquí muchas veces antes.

Lo que se podría hacer en este caso es, pele el ataque y de salida / así:

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

y terminar con la longitud ed "correcta".

0

Me harté de siempre vigilando para un [0] == '', así:

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

Versión corregida para cuando el elemento 1 podría ser nulo:

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

Sin embargo, esto fallará para ", a, b, c" .splitPlus (",") - devolviendo [] cuando debería devolver ["", "a", "b", "c"]. También debes verificar la longitud de la matriz. – CherryDT

+0

agrega && a.length> 0 a tu condición if. – aggaton

+0

@aggaton Agregué la versión corregida con: 'if (a [0] == '' && a.length == 1) return [];' –

0

probar esto

javascript da dos arrays por función dividida, luego

var Val = "[email protected]"; 
var mail = Val.split('@'); 

if(mail[0] && mail[1]) { alert('valid'); } 
else { alert('Enter valid email id'); valid=0; } 

si ambos matriz contiene longitud mayor que 0, entonces la condición será verdadera

Cuestiones relacionadas