ES6 with default arguments : 参数是否传入
ES6 with default arguments : Whether a parameter is passed in or not
function myfunc( value1, value2='defaultValue' ) {
//some stuff
}
我怎么知道参数是否传入函数。我知道如果您不传入任何内容,将设置默认值,因为 argument.I 实际上想检查用户是否将任何内容作为第二个参数传递(即使它与默认值相同)并更改我的 return 相应的值。
我正在检查 ES6 docs and this SO answer ,不是我要找的东西。
谢谢,
arguments
仍然代表您发送的实际参数,因此 arguments.length
将为您提供该信息。
function myfunc( value1, value2='defaultValue' ) {
console.log("value1", value1);
console.log("value2", value2);
console.log("length", arguments.length);
}
myfunc("foo");
在兼容的 JavaScript 引擎上,输出
value1 foo
value2 defaultValue
length 1
但是,arguments
在箭头函数中不起作用,并且 estus posted .
对于复杂的参数处理,rest参数可能是有益的,也弃用了arguments.length
:
function myfunc(...args) {
let [value1, value2 = 'defaultValue'] = args;
console.log("value1", value1);
console.log("value2", value2);
console.log("args.length", args.length);
}
myfunc("foo");
手动参数解析对于使用直观的默认方法的情况特别有用,即当传递的参数应该替换默认值时,即使它是 undefined
:
function myfunc(...args) {
const defaultArgs = ['defaultValue1', 'defaultValue2'];
let [value1, value2] = Object.assign(defaultArgs, args);
...
}
您可以使用不可伪造的令牌作为默认参数值。没有调用者能够将这个值作为参数传递,所以'defaultValue'你知道参数最终绑定到这个特定值的唯一方法是没有参数通过了
谢天谢地,ECMAScript 有一个不可伪造令牌的数据类型完全我们想要的:Symbol
:
const myfunc = (() => {
const value2Token = Symbol("value2");
return function myfunc(value1, value2 = value2Token) {
if (value2 === value2Token) { value2 = 'defaultValue'; }
// some stuff
}
})();
这当然有点难看,但我认为它比弄乱 arguments
更难看,而且它是 确切地 是否确定的可靠方法是否传递了可选参数,因为 Symbol
s 是完全不可伪造的。
function myfunc( value1, value2='defaultValue' ) {
//some stuff
}
我怎么知道参数是否传入函数。我知道如果您不传入任何内容,将设置默认值,因为 argument.I 实际上想检查用户是否将任何内容作为第二个参数传递(即使它与默认值相同)并更改我的 return 相应的值。
我正在检查 ES6 docs and this SO answer ,不是我要找的东西。
谢谢,
arguments
仍然代表您发送的实际参数,因此 arguments.length
将为您提供该信息。
function myfunc( value1, value2='defaultValue' ) {
console.log("value1", value1);
console.log("value2", value2);
console.log("length", arguments.length);
}
myfunc("foo");
在兼容的 JavaScript 引擎上,输出
value1 foo value2 defaultValue length 1但是,
arguments
在箭头函数中不起作用,并且 estus posted
对于复杂的参数处理,rest参数可能是有益的,也弃用了arguments.length
:
function myfunc(...args) {
let [value1, value2 = 'defaultValue'] = args;
console.log("value1", value1);
console.log("value2", value2);
console.log("args.length", args.length);
}
myfunc("foo");
手动参数解析对于使用直观的默认方法的情况特别有用,即当传递的参数应该替换默认值时,即使它是 undefined
:
function myfunc(...args) {
const defaultArgs = ['defaultValue1', 'defaultValue2'];
let [value1, value2] = Object.assign(defaultArgs, args);
...
}
您可以使用不可伪造的令牌作为默认参数值。没有调用者能够将这个值作为参数传递,所以'defaultValue'你知道参数最终绑定到这个特定值的唯一方法是没有参数通过了
谢天谢地,ECMAScript 有一个不可伪造令牌的数据类型完全我们想要的:Symbol
:
const myfunc = (() => {
const value2Token = Symbol("value2");
return function myfunc(value1, value2 = value2Token) {
if (value2 === value2Token) { value2 = 'defaultValue'; }
// some stuff
}
})();
这当然有点难看,但我认为它比弄乱 arguments
更难看,而且它是 确切地 是否确定的可靠方法是否传递了可选参数,因为 Symbol
s 是完全不可伪造的。