是什么导致错误“ string.split不是函数”?


110

我为什么要...

未捕获的TypeError:string.split不是函数

当我跑步时

var string = document.location;
var split = string.split('/');


2
document.location是一个对象。试试:var string=document.location.href
Teemu

Answers:


212

改变这个...

var string = document.location;

为此...

var string = document.location + '';

这是因为document.location是一个Location对象。默认.toString()值以字符串形式返回位置,因此串联将触发该位置。


您也可以document.URL用来获取字符串。


57
调用toString()而不是强悍的串联会更干净吗?
卡帕2012年

2
@bažmegakapa:是的,这是优先选择的问题。这+ ''是字符串强制的一种很常见的技巧,但有些人更喜欢该toString()方法。我不会比使用一元+数字转换更令人讨厌。

3
那同样丑陋。有parseInt()parseFloat()。也有Number()。的+是当然的较短,但对于某人不用于哈克代码或经验较少的可读性。
kapa 2012年

+ ''方法在Chrome浏览器中对我来说没有任何变化,但toString()可以。
Martin Schneider

@ MA-Maddin:你做了my_string + "".split()吗?如果是这样,则需要+优先级,因为其优先级低于.。像这样:(my_string + "").split()

66

也许

string = document.location.href;
arrayOfStrings = string.toString().split('/');

假设您想要当前网址


12

运行这个

// you'll see that it prints Object
console.log(typeof document.location);

你想要document.location.toString()document.location.href


谢谢。我没有意识到我将var从字符串转换为对象。您的解决方案使我有了一个检查我的代码的想法。
sg552

7

document.location 不是字符串。

您可能想要使用document.location.hrefdocument.location.pathname代替。


大声笑。至少同时回答4个。我不应该关注SO的最新问题:)
DenysSéguret2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.