[英]Javascript skip arguments in function call
javascript初學者在這里。
假設我有一個帶有 3 個參數的 javascript 函數:
function f(arg1, arg2, arg3) { // do stuff }
我知道我可以調用 f(value1, value2); 在這種情況下,在函數作用域內,arg1 將為 value1,arg2 將為 value2,arg3 將為 null。
一切正常。 但是,如果我想調用只給arg1
和arg3
的函數,我需要做這樣的事情: f(value1, null, value2)
;
有沒有一種方法可以指定哪些參數以更具 C# 風格的方式具有哪些值(而不將未給定的參數指定為 null)? 像這樣:為了調用 f 只為arg1
和arg3
f(value1, arg3 = value2);
我會寫f(value1, arg3 = value2);
有任何想法嗎? 干杯!
我已經看到了一種方法:
例如
function person(name,surname,age)
{
...
}
person('Xavier',null,30);
你可以這樣做:
function person(paramObj)
{
var name = paramObj.name;
var surname = paramObj.surname;
var age = paramObj.age;
}
像這樣調用:
person({name:'Xavier',age:30});
我認為這是您在 c# 中能夠做到的最接近的事情,請記住,JS 未編譯,因此您無法預測函數的參數。
編輯:
為了獲得更好的語法,您可以使用 ES6 對象解構,如下所示:
function person({name, surname, age})
{
...
}
是的你可以。 可以寫成:
f(arg1, undefined, arg3);
在這個調用中,參數 1 和 3 將通過,而參數 2 不會被發送。
如果你打算這樣做(假設它是有效的)
f(value1, arg3 = value2)
那么參數 2 將是未定義的,所以只需傳遞:
f(value1, undefined, value2)
使用 JS 做到這一點的唯一方法是傳遞一個包含所有參數的數組。
您必須在函數中設置默認值 - 您不能在 JavaScript 中為參數定義默認值。
function foo( args ){
var arg1 = args[ 0 ] || "default_value";
var arg2 = args[ 1 ] || 0;
///etc...
}
更好的是,您可以傳遞一個簡單的對象而不是數組,該對象允許您通過對象中的鍵訪問參數:
function foo( params ){
var arg1 = params[ "arg1" ] || "default_value";
var arg2 = params[ "arg2" ] || 0;
///etc...
}
隨着ECMAScript 6 (ECMAScript 2015) 和Default Parameters的引入,它可以像為參數設置默認值並傳遞undefined
以跳過參數一樣簡單:
function paramsTest(p1 = "p1 def", p2 = "p2 def", p3 = "p3 def") { console.log([p1, p2, p3]); } paramsTest(); // [ "p1 def", "p2 def", "p3 def"] paramsTest("p#1", "p#2"); // [ "p#1", "p#2", "p3 def"] paramsTest("p#1", undefined, null); // [ "p#1", "p2 def", null]
嘿,我有一個類似的問題,但我不知道它是否適用於任何上下文,以及它是否適用於 ES5,但在 ES6 和我的上下文中,我能夠將 undefined 作為我想跳過的參數傳遞。
我所說的上下文的意思是,在我的情況下,我在具有 ES6 格式的函數中為該參數分配一個默認值:
const exampleFunc = (arg1 = "defaultValue",arg2) => {
console.log(arg1,arg2)
}
exampleFunc(undefined,"hello!");
//this would log to the console "defaultValue","hello!"
如果您沒有在 ES6 格式的函數中分配默認值,我不確定這是否可行,但它對我有用! 希望這有幫助
將此代碼添加到您的函數中(對於默認值)
function f(a, b, c)
{
a = typeof a !== 'undefined' ? a : 42;
b = typeof b !== 'undefined' ? b : 'default_b';
a = typeof c !== 'undefined' ? c : 43;
}
像這樣調用函數
f(arg1 , undefined, arg3)
另一個有趣的方法是使用Function.prototype.call()
方法。 我們所要做的就是使用默認調用對象值分配參數,然后您可以自由地僅使用您想使用的參數調用該方法:
function f(arg1 = this.arg1, arg2 = this.arg2 || false, arg3 = this.arg3) { console.log([arg1, arg2, arg3]); } f.call({ arg1: 'value for arg1', arg3: 'value for arg3'}); f('value for arg1', undefined, 'value for arg3');
請注意,我將 arg2 設置為this.arg2 || false
this.arg2 || false
- 當不存在 f.call 實例對象 arg2 屬性時,此語法允許回退到 false 而不是 undefined。
在 ES6 中,如果你的參數是可選的,因為它們有默認值並且你可以傳遞一個對象,你可以使用擴展語法:
function f(opts) {
const args = {
arg1: 'a',
arg2: 'b',
arg3: 'c',
...opts
}
const {arg1, arg2, arg3} = args
return arg1.concat(arg2, arg3)
}
f() // "abc"
f({arg1: '1', arg3: '3'}) // "1b3"
f({arg2: ' whatever '}) // "a whatever c"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.