2012-06-18 53 views
2

Apoligies爲我對jQuery的基本理解。我正在嘗試編寫一個函數,該函數可以由用戶設置值或保留爲空,並自行設置。它看起來像這樣:發送沒有參數導致未設置變量錯誤的函數

// Calendar 
function eventCalendar(yearSet, monthSet) { 

    // Get current date 
    var date = new Date(); 

    // Check to see if variables were set in function 

    // Year 
    if ((yearSet.length > 0)) { 
      var year = yearSet; 
     } else { 
      var year = date.getFullYear(); 
     } 

    // Month 
    if ((monthSet.length > 0)) { 
      var month = monthSet; 
     } else { 
      var month = date.getMonth(); 
     } 

    console.log(month + ', ' + year); 
} 

然而,當調用函數時不變量,控制檯發送我的錯誤:

'yearSet is undefined'

如何解決此得到什麼?

回答

1
if(yearSet && yearSet.length) { 
    //.. 
} 

您可以像這樣簡化您的方法。

function eventCalendar(yearSet, monthSet) { 
    var date = new Date(); 
    //if yearSet is present it will get that or else from new Date 
    var year = yearSet || date.getFullYear(); 
    //if monthSet is present it will get that or else from new Date 
    var month = monthSet || date.getMonth(); 

    console.log(month + ', ' + year); 
} 
+0

這很好,但我很困惑這些'或'運營商如何工作。 如果它是未定義的,它只是忽略或語句中的第一個變量?因此,如果我將它更改爲var year = date.getFullYear()|| yearSet;它會將其設置爲date.getFullYear並忽略用戶變量,即使它已被定義? – theorise

+0

是的,你的理解是正確的。 – ShankarSangoli

+0

太棒了,謝謝你的幫助。 – theorise

0

比較它undefinednull而不是檢查長度

1

您可以檢查的參數的truthy或falsey性質而不是檢查,如果他們是不確定的明確:

function eventCalendar(yearSet, monthSet) { 
    var date = new Date(); 
    var year = yearSet && yearSet.length ? yearSet : date.getFullYear(); 
    var month = monthSet && monthSet.length ? monthSet : date.getMonth(); 
    console.log(month + ', ' + year); 
} 

僅供參考當前的嘗試訪問undefined變量(year)的屬性(length)導致錯誤。我建議讓Google瞭解JavaScript中的真實性和虛假性IMO是一種非常有用的語言功能。

0

檢查變量未定義與此代碼:因爲當你使用.length你假設給定的變量存在

if(typeof(variable) === 'undefined') { 
    // var is undefined 
} 

您的代碼將拋出錯誤。

0

還要考慮「」被認爲是包含字段的有效值。你想做一些更性感的東西:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

function eventCalendar (y,m) { 
    var date = new Date(); 
    y=(isNumber(y) ? y : date.getFullYear(); 
    m=(isNumber(m) ? m : date.getMonth(); 
    console.log(m + " " + y); 
} 

未經測試,但它應該做你想做的。

相關問題