假设我有这样的功能
function functionName(parameter = 5) {
}
如果该参数的值已被更改,是否可以检查函数内部?我的意思是,如果有人像这样调用函数" functionName()"默认值不会被更改,但如果它被调用如此" functionName(10)",它的值会有所不同,
答案 0 :(得分:2)
唯一(有效)的方法是只显式检查值:
function functionName(parameter = 5) {
if(parameter == 5){
// parameter is default;
}
}
请注意,此类可选参数尚未得到广泛支持(它是ES6 +)。 “旧”方法将是这样的:
function functionName(parameter) {
if(typeof parameter=== "undefined"){
parameter = "defaultValue";
// parameter is default;
}
}
这样做的好处是能够毫无疑问地确定是否传递了参数(除非您通过undefined
)。在第一个示例中,传递的5
将无法与未传递的参数区分开来。
答案 1 :(得分:2)
我不是说这是一个好主意(如果你真的需要知道,我可能只是不使用默认参数并检查undefined
),但你可以通过查看arguments
伪数组来判断。例如:
function myFunction(parameter = 5) {
if (arguments.length === 0) {
console.log("parameter = " + parameter + " (DEFAULT)");
}
else {
console.log("parameter = " + parameter + " (provided)");
}
}
myFunction();
myFunction(5);
myFunction(6);
输出
parameter = 5 (DEFAULT) parameter = 5 (provided) parameter = 6 (provided)
如您所见,您可以判断您是否知道parameter
是第一个参数,arguments.length
是0
。或者,如果function myFunction(a = 5, b = 6, c = 7)
c
arguments.length
<= 2
arguments
,则arguments
知道<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Default Args</title>
</head>
<body>
<script>
(function() {
"use strict";
function myFunction(parameter = 5) {
if (arguments.length === 0) {
display("parameter = " + parameter + " (DEFAULT)");
}
else {
display("parameter = " + parameter + " (provided)");
}
}
myFunction();
myFunction(5);
myFunction(6);
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>
已被默认。
draft specification的{{1}}部分直到最新版本大部分只是ES5规范的副本,但2014年4月已更新{{1}}更改的详细信息。我没有机会搞砸了斯特朗德的散文,但我希望在那里有所涉及。
Full Live Example - 仅适用于最近的Firefox
{{1}}
答案 2 :(得分:0)
在没有传递参数的情况下,您是否在寻找默认值?
function myFunction(parameter) {
parameter = parameter || 5;
}
或者您可以访问arguments变量以更好地检查参数。