2010-08-19 50 views
2

我碰到下面的代碼來由ruby開發人員撰寫的JavaScript。需要重構

function currentSlideFromParams() { 
    var result; 
    if (result = window.location.hash.match(/#([0-9]+)/)) { 
    return result[result.length - 1] - 1; 
    } 
} 

很顯然,這個碼是一個Ruby開發人員編寫的。然而,ruby慣用的不一定是JavaScript慣用法。其次,當我通過Jslint運行代碼時,代碼會抱怨,因爲它警告在條件檢查中有一項分配。

請根據JavaScript慣用法建議重構代碼。

回答

4
function currentSlideFromParams() { 
    var result = window.location.hash.match(/#([0-9]+)/); 
    if (result) { 
    return result[result.length - 1] - 1; 
    } 
} 

這將首先分配給它。我看不出什麼大問題,儘管......你並不需要遵守jslint的規定。

+0

一個不必,但它抓住了很多錯誤。同時它也帶來了團隊中的整合,讓一個人加入;一個不加。現在jQuery已經開始通過jslint運行它的代碼。 – 2010-08-19 15:29:11

2

只需從if()聲明中獲取變量賦值。

function currentSlideFromParams() { 
    var result = window.location.hash.match(/#([0-9]+)/); 
    if (result) { 
    return result[result.length - 1] - 1; 
    } 
} 

此外,如果您預計多比賽和正在尋找的最後,你應該g全球標識符添加到正則表達式。

window.location.hash.match(/#([0-9]+)/g) 
0

很明顯,這段代碼是由一個Ruby開發人員編寫的。

真的嗎?一個rubyist這樣寫:

def current_slide_from_params 
    (location.hash =~ /#(\d+)/ && $1).to_i - 1 
end 

翻譯爲:

function currentSlideFromParams() { 
    return (/#(\d+)/.test(location.hash) && RegExp.$1) - 1; 
} 

;)

相關問題