关于JavaScript的split()函数的困惑

时间:2011-03-02 08:05:48

标签: javascript split

首先我设置一个变量,并将其设置为空:

var str = "";

然后我将其拆分为“&”:

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

最后,我显示strs的长度:

alert( strs.length);

警告“1”。

但我没有为'str'变量赋值。为什么它仍然有一个长度,它不应该为零吗?

8 个答案:

答案 0 :(得分:53)

来自MDC文档中心:

  

注意:当字符串为空时,split返回一个包含一个空字符串的数组,而不是一个空数组。

阅读完整文档:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

换句话说,这是设计上的,而不是错误:)

答案 1 :(得分:8)

因为你得到一个包含空字符串的数组:

[ "" ]

那个空字符串是一个元素。所以length是1。

答案 2 :(得分:5)

拆分window.location.pathname

请注意,在window.location.pathname拆分时,它也会返回+1的长度。

让我们假设在这种情况下我们的路径名是:/index.html

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

它将被设计分割为["" , "index.html"],如前所述,这里曾多次提及。

在这种情况下,可以做的是,像这样剥离前导和尾随/

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

并以“正确”的ed长度结束。

答案 3 :(得分:3)

  

描述

     

split方法返回new   阵列。

     

找到后,将从中删除分隔符   字符串和子串是   以数组形式返回。如果是分隔符   省略,数组包含一个   元素由整个组成   字符串。

     

注意:当字符串为空时,split会返回一个包含一个数组的数组   空字符串,而不是空字符串   阵列

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

答案 4 :(得分:0)

JavaScript split创建一个数组。也就是说,您的变量strs = [0]=>""及其长度为1。

答案 5 :(得分:0)

我厌倦了总是检查[0] ==''所以:

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

元素1可能为空时的更正版本:

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

答案 6 :(得分:0)

消除任何空字符串。

str.split('{SEPERATOR}').filter(r => r !== 'null')

答案 7 :(得分:-1)

试试这个

javascript通过split函数提供两个数组,然后

var Val = "abc@gmail.com";
var mail = Val.split('@');

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

如果两个数组都包含大于0的长度,则条件为真