您好:如下程式码,为何 我呼叫 str_YYYYMM31()但她却跑去 str_YYYYMM31( yyyy,mm ),结果就错了谢谢
function hrdate_e_df(){
/*
let d = new Date();
let d31= new Date(d.getFullYear(), d.getMonth() + 1, 0);
let xx = date2SateStr(d31);
*/
let y=str_YYYYMM31();
return y;
}//--hrdate_e_df
function str_YYYYMM31() { /*月底*/
let d = new Date();
let d31= new Date(d.getFullYear(), d.getMonth() + 1, 0);
//document.write(d01);
return date2SateStr(d31);
}
function str_YYYYMM31( yyyy,mm ) { /*月底; 传入西元年,月 数值 */
let d31= new Date(yyyy, mm , 0); //---这边直接用MM,不需要MM+1
//document.write(d01);
return date2SateStr(d31);
}
3 个回答
- 旧至新
- 新至旧
- 最高Like数
1
idoncys
iT邦研究生 1 级 ‧ 2024-10-09 16:02:22
最佳解答
贴到 chatgpt 会回答如下,不知道是否为你要的答案
在你的代码中,函数 str_YYYYMM31
被定义了两次:一次是无参数的,另一次是带有 yyyy
和 mm
参数的。由于 JavaScript 的函数重载是基于最后定义的函数,调用 str_YYYYMM31()
时会使用带参数的版本。
因此,当你调用 str_YYYYMM31()
时,实际上是调用了带参数的函数,但没有提供参数,这导致函数在执行时出错。
要解决这个问题,有两种方法:
-
重命名函数:给其中一个函数一个不同的名字,避免重名。例如,可以将带参数的函数重命名为
str_YYYYMM31_param
。function str_YYYYMM31_param( yyyy, mm ) { /*月底; 传入西元年,月 数值 */ let d31 = new Date(yyyy, mm, 0); return date2SateStr(d31); }
-
合并函数:你可以将两个函数合并为一个,通过检查参数的数量来决定如何处理。
function str_YYYYMM31(yyyy, mm) { let d31; if (arguments.length === 0) { let d = new Date(); d31 = new Date(d.getFullYear(), d.getMonth() + 1, 0); } else { d31 = new Date(yyyy, mm, 0); } return date2SateStr(d31); }
这样,你可以在不传递参数时使用 str_YYYYMM31()
获取当前月份的最后一天,或者传递 yyyy
和 mm
参数来获取特定月份的最后一天。
-
1 -
-
noway
iT邦研究生 1 级 ‧
2024-10-09 16:52:36
谢谢您!
修改
0
ky0000
iT邦新手 5 级 ‧ 2024-10-09 16:05:52
在 js 中应该没有这种 overload 写法
可以写成
function str_YYYYMM31( yyyy = null , mm = null ) {
const d = new Date();
const d31 = new Date(yyyy ?? d.getFullYear(), mm ?? d.getMonth() + 1, 0);
return date2SateStr(d31);
}
-
5 -
-
看更多先前的...收起先前的...
noway
iT邦研究生 1 级 ‧
2024-10-09 16:44:41
您好:
yyyy = null , mm = null
会出现错误
?? 语法错误
?? 语法错误
修改
ky0000
iT邦新手 5 级 ‧
2024-10-09 17:55:25
这不是 javascript 吗
修改
㊣浩瀚星空㊣
iT邦大神 1 级 ‧
2024-10-15 17:28:22
javascript 没有 ?? 的使用方法啦!!
PHP用太久了喔
修改
ky0000
iT邦新手 5 级 ‧
2024-10-16 12:39:22
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing
修改
froce
iT邦大师 1 级 ‧
2024-10-17 09:03:26
https://ics.media/entry/200128/
ES2020加进去的。
ES2020加进去的。
修改
3
harry xie
iT邦研究生 1 级 ‧ 2024-10-09 16:08:59
不建议这样写,你如果要用 overload 这个特性建议用 TypeScript
为什么执行 str_YYYYMM31( yyyy,mm ),因为第二个宣告的函式跟第一个同名,所以覆盖掉了第一个函式,把函式看着变数想就很好懂了