用.split()结果覆盖源变量

时间:2011-12-07 04:44:06

标签: javascript arrays split

分割之前已拆分的变量并覆盖原始变量时是否有任何问题?

示例:

arr = str.split(" ");
arr = arr[0].split("/");

我测试了它并且它有效。但是:

  • 这样做有风险吗?
  • 它会在任何时候以及在所有浏览器上表现如我所期望的那样吗?

2 个答案:

答案 0 :(得分:3)

在所有浏览器中都可以。没有风险。

您只是指定变量arr来引用新的东西,它引用的内容并不重要。 (这实际上并没有“覆盖旧数组”,但如果没有对旧数组的其他引用,垃圾收集器将负责处理它。)

您也可以在一行中完成:

arr=str.split(" ")[0].split("/");

请注意according to MDN, .split()始终返回一个至少包含一个元素的数组,即使源字符串为空或不包含分隔符。

编辑:如果源字符串分隔符都是空字符串.split()似乎返回一个空数组。即,"".split("")返回[]。感谢Munim指出这一点。 (但"".split(" ")会返回[""],因此对于此问题的目的不会有任何问题。)

答案 1 :(得分:0)

如果你知道arr被完全覆盖了,那么根本没有风险。对于更大的代码片段执行此操作可能是不好的做法,或者如果其他人要阅读它,但这种逻辑方面没有任何问题。 如果你想变得更加神秘,试试这个: arr = str.split(“”)[0] .split(“/”);

当然你必须确保评估所有各个部分(例如,如果你没有空格,那么[0]将为null并且你将得到一个错误。 如果你知道你总是在str中有空格那么这将是上面代码中最难阅读的版本;)