エラー「string.split is a function」の原因は何ですか?


110

なぜ私は...

Uncaught TypeError:string.splitは関数ではありません

...走ると...

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


2
document.locationオブジェクトです。試してみてくださいvar string=document.location.href
Teemu

回答:


212

これを変える...

var string = document.location;

これに...

var string = document.location + '';

これは、document.locationLocationオブジェクトであるためです。デフォルトで.toString()は場所が文字列形式で返されるため、連結によってトリガーされます。


document.URL文字列を取得するために使用することもできます。


57
toString()ハック連結の代わりに呼び出す方がきれいではないでしょうか?
kapa

2
@bažmegakapa:ええ、それは好みの問題です。これ+ ''は文字列強制のかなり一般的なトリックですが、一部の人はこのtoString()方法を好みます。私は、単項+を数値変換に使用すること以上にハッキリだとは思わないでしょう。

3
それも醜いです。ありますparseInt()parseFloat()。もありNumber()ます。+もちろんこれは短いですが、ハッキーなコードに慣れていない人や経験の浅い人には読みにくいです。
kapa

この+ ''方法では、ChromeブラウザでtoString()は何も変更されませんが、変更されます。
Martin Schneider

@ MA-Maddin:しましたmy_string + "".split()か?もしそうなら+、よりも優先順位が低いので括弧が必要です.。このように:(my_string + "").split()

66

多分

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

あなたは現在のURLが欲しいと仮定します


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éguret12年

0

clausule ifでは、を使用します()。例えば:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.