我对jQuery的基本理解的Apoligies。我正在尝试编写一个函数,该函数可以由用户设置值或留空,设置自己。它看起来像这样:
// 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未定义'
我该如何解决这个问题?
答案 0 :(得分:1)
您可以检查参数的真实或虚假性质,而不是检查它们是否未明确定义:
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);
}
仅供参考我们当前的错误是由于尝试访问length
变量(undefined
)的属性(year
)而导致的。我建议谷歌有关于IMO的真实性和虚假性,这是该语言的一个非常有用的功能。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
将其与undefined
或null
进行比较,而不是检查长度
答案 3 :(得分:0)
使用以下代码检查变量是否未定义:
if(typeof(variable) === 'undefined') {
// var is undefined
}
您的代码会抛出错误,因为当您使用.length
时,您认为给定的变量存在。
答案 4 :(得分: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);
}
未经测试,但它应该做你想要的。