我是Web开发和JS的新手。
我在此字符串上使用String对象方法:
let str = 'Look at me '; //last character is space
console.log(str.split(' '));
分割的分隔符是''以及空格。 我希望有3个项目的阵列,以及我将分析如何分裂。但是,我得到了这个:
['Look', 'at', 'me', '']
有人可以向我解释为什么会发生这种情况? 提前谢谢!
答案 0 :(得分:4)
ECMA-262在JavaScript中指定how split()
is implemented。
这很难读,但这是我解释它... ...
步骤14指定$_SESSION
始终通过抓取切片到字符串结束的位置结束:
- 设T是一个字符串值,等于S的子字符串,由p(包括)到s(不包括)位置的字符组成。
醇>
然后将该片添加到输出数组中:
- 使用参数ToString(lengthA)调用A的[[DefineOwnProperty]]内部方法,属性描述符{[[Value]]:T,[[Writable]]:true,[[Enumerable]]:true,[[可配置]]:true}和false。
醇>
请记住,split()
的参数是分隔符(也称为分隔符)。
split()
将"ABC".split("B")
视为分隔符,分隔子字符串"B"
和"A"
。
"C"
将"ABC".split("C")
视为分隔符,分隔子字符串"C"
和"AB"
。是的,空字符串仍然是一个字符串,因此""
将子字符串"C"
与子字符串"AB"
分开。
您的示例是相同的,除了代替""
,您有一个空格字符"C"
。空格在任何方面都不是特殊的,因此适用相同的规则:它将前面的子串与后面的子串分开(恰好是空的)。
答案 1 :(得分:3)
split()
函数有效地将字符串分成几部分并将这些部分放入一个数组中。函数(' ')
的第一个参数是一个空格,意味着除法发生在有空格的地方。您的字符串'Look at me '
中有三个空格或三个分区。如果你要拿一块长蛋糕并将其切三次,你最终会得到四个件。在现实世界中,你当然不会有第四块有效“空”或空白,但在计算机科学中,你只需要一件没有任何东西的东西。
@ppasler指出的解决方案是修剪你试图拆分的字符串中的多余空格。 trim()
从字符串的开头和结尾删除空格,这意味着trim('Look at me ')
会导致'Look at me'
。如果您在结果字符串上使用split,则会得到:['Look', 'at', 'me']
。
答案 2 :(得分:1)
separator
发生时, split(separator, limit)
都会拆分一个字符串。在你的情况下,separator
也是字符串中的最后一个字符,这意味着它在那里分开,尽管之后没有任何内容(导致空字符串''
)
使用trim()
删除前导空格和尾随空格,因此在拆分数组的末尾不会有空字符串。
let str = 'Look at me '; //last character is space
console.log(str.trim().split(" "));

答案 3 :(得分:1)
这是因为你的字符串在末尾包含一个空格。你字符串的最后一个空格是#34; split",左边是一个单词(' me'),右边是一个空字符串('') ;这就是split
的工作方式。您可以查看此信息以供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split。
如果您想删除最后一个元素,只需删除末尾的额外空格即可。您可以使用trim
:
let str = 'Look at me '; //last character is space
console.log(str.trim().split(' '));
答案 4 :(得分:1)
发生这种情况是因为str.split(" ")
返回字符串值,直到输入没有更多字符,并且每次NEXT字符是您传递的输入字符时更改为下一个数组元素。并且因为您的输入在其末尾有空格字符,所以split方法的最后返回值将为空。