JavaScript split() 函数与空字符串的混淆

问题描述 投票:0回答:9

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

var str = "";

然后我通过“&”来分割它:

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

最后我展示一下

strs
的长度:

alert( strs.length);

警报“1”。

但我没有为“str”变量分配任何内容。为什么它还有长度,不应该是零吗?

javascript split
9个回答
78
投票

来自MDC文档中心:

注意:当字符串为空时,

split
返回一个包含一个空字符串的数组,而不是一个空数组。

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

换句话说,这是设计使然,而不是错误:)


9
投票

分割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('/');

最终得到“正确”的长度。


8
投票

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

[ "" ]

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

length
是 1。


6
投票

消除任何空字符串。

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

4
投票

描述

split方法返回新的 数组。

发现后,将分离器从 字符串和子字符串是 以数组形式返回。如果分隔符是 省略,数组包含一个 整个元素组成 字符串。

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

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


1
投票

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

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

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

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

0
投票

JavaScript

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


0
投票

发明爆炸/内爆(如PHP)

Object.defineProperty(String.prototype,"explode",{
    value: function (sep = '') {
        return this.length ? this.split(sep) : [];
    }
});

-1
投票

试试这个

javascript 通过 split 函数给出两个数组,然后

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

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

如果两个数组的长度都大于 0,则条件将为 true

© www.soinside.com 2019 - 2024. All rights reserved.