2013-02-05 90 views
0

我想這很簡單,但我似乎無法實現它。我有這樣的一段:Javascript錯誤 - Can not run .split on undefined

var choice = location.href.split("?")[1].split("=")[1]; 

它正常工作,直到「選擇」是空的,那麼它引發以下錯誤....

TypeError: location.href.split(...)[1] is undefined 

我明白了,這是因爲你不能呼叫拆分在一個未定義的變量上,我認爲我的解決方案是存儲變量,然後將其拆分,如果未定義則將其忽略。

有人可以幫我做這個嗎?

+0

如果只輸出'location.href',你會得到什麼? – boz

回答

3

不超爽做這樣的,但如果你希望在查詢字符串只有一個參數,你可以做這樣的:

var choice = (location.href.split("?")[1] || '').split("=")[1]; 

你會得到choice作爲undedfined,如果它不是在設置請求參數。

+0

針對我特殊情況的快速簡單的解決方案,謝謝 – fightstarr20

1

沒有足夠的信息,但是第一個分割的1索引的屬性href或者未定義,或者上一個分割的第二個項目未定義。

您會將拆分分成幾個語句。

var choice; 
var firstSplit = location.href; 

if (firstSplit) { 
    var secondSplit = firstSplit.split("?"); 
} 
if (secondSplit[1]) { 
    choice = secondSplit[1].split("="); 
} 

然後你可以使用從最後一個分割返回的任何東西。

0

如果您試圖拆分可能包含查詢字符串或不包含查詢字符串的URL,您會看到此例外。您應該檢查查詢字符串存在試圖操縱它之前:

var choice; 
var outerSplit = window.location.href.split('?'); 
var innerSplit; 
if (outerSplit.length > 1) { 
    innerSplit = outerSplit.split('='); 
    if (innerSplit.length > 1) { 
     choice = innerSplit[1]; 
    } 
} 

如果你發現自己在執行此型常查詢字符串操作,你可能希望在可重複使用的功能,投資就像從this question之一。

相關問題