![](/img/trans.png)
[英]How to pass optional parameter to a function in react and javascript?
[英]In JavaScript, how can I create a function with an optional parameter?
問題:在帶有可選參數的 JavaScript 中定義 function 的正確方法是什么?
例如:
function myFunc(optionVar1) {
if(optionVar1 == undefined) {
...
} else {
...
}
}
myFunc('10'); // valid function call
myFunc(); // also a valid function call
使用 a 是否合適?
在 function 聲明中標記 Ruby 表示可選參數:
function myFunc(optionVar1?) {...} // <--- notice the ? mark
Javascript中沒有語法指定參數是可選的(或必需的)。 所有參數都是可選的。 如果未指定它們,則它們undefined
因此您需要檢查它。 例如,此函數實際上會為參數創建默認值10:
function myfunc(someParam) {
if (someParam === undefined) {
someParam = 10;
}
...
}
您還可以使用arguments
屬性以編程方式訪問參數。
最后,如果你有超過3-4個參數,通常建議使用匿名對象。
實際上,JS函數中的所有參數都是可選的。 如果省略參數,則沒有警告或錯誤。
您可以設置默認值
function throw_cat(dist){
dist = typeof dist=='undefined' ? 20 : dist;
//OR
dist = dist || 20; //this will assign it to 20 if you pass 0 or another 'falsy' value, though. May be good if you expect a string. String '0' stays, '' or null assigns the default
//etc...
}
使用doclet時,可以在注釋部分使用注釋,例如{Object =}或{number =}:
/** * @param {object=}xyz */
現代IDE知道識別JavaScript的注釋,並向您顯示代碼中潛在問題的跡象。
例:
/**
*
* @param query
* @param callback
* @param {number=} ttl optional time-to-leave
*/
loadByJSONP:function loadByJSONP(query, callback, ttl) {
...do some work
}
在這個例子中,'ttl'是可選的。 注釋{number =}向IDE指示此參數是可選的。 因此,當您僅使用兩個參數調用此函數時,您將不會收到警告。
注釋也可用於指定預期類型。 這使您的代碼更好,更不容易出錯。 這是注釋的鏈接:
https://developers.google.com/closure/compiler/docs/js-for-compiler
首先,每個編寫JavaScript的人都幫自己一個忙,並從John Resig 學習高級JavaScript 。
function myFunc(arg1, arg2 /* varargs... */) {
var optional = Array.prototype.slice.call( arguments, 2 );
函數的每個參數都是“可選的”,即使是在函數聲明的參數列表中聲明的參數也是如此。
只要考慮好好記錄它們。
某些來源會告訴您完全跳過參數,而是使用arguments數組。 這使您可以獲取提供給函數的任何輸入,並且可以根據需要決定如何響應傳遞給函數的參數。
您可以在此處閱讀更多相關信息: http : //www.devguru.org/technologies/ecmascript/quickref/arguments.html
克萊圖斯和達莫維薩提出了很好的建議。 我還想補充一點(像我一樣)可能更喜歡這樣的符號:
function foo(/*bar*/) {
if (arguments.length == 1) {
var bar = arguments[0];
...
}
}
這用於向代碼庫的開發人員記錄該參數是可選的並且還記錄了名稱,但它也阻止了參數在調試器中顯示在函數名中(該示例將顯示為foo()而不是foo (optional_argument) 。否則,使用API的開發人員可能會認為它是必需的。
編輯:這對於要在內部使用的可選參數特別有用。
我發現的第一個谷歌回復:
http://www.tipstrs.com/tip/354/Using-optional-parameters-in-Javascript-functions
我沒有看到任何使用問號向呼叫者提醒可選參數的情況。 雖然它是用其他語言完成的,但我不認為它在javascript中是必要的。
事實上, 您似乎無法在變量名稱中使用問號 。 只有字母,數字,$和_。
只是不要使用任何參數定義函數,並從您希望可選參數的函數中訪問特殊參數數組。 以下示例。
<HTML>
<HEAD>
<SCRIPT Language="JavaScript">
function foo() {
var argv = foo.arguments;
var argc = argv.length;
for (var i = 0; i < argc; i++) {
alert("Argument " + i + " = " + argv[i]);
}
}
</SCRIPT>
</HEAD>
<BODY onload="foo('hello', 'world');">
</BODY>
</HTML>
使用是否合適? 在函數聲明中標記為Ruby
不,沒有基於語言的方式表示可選的arg。 我絕對認為值得在評論中指出:
function myFunc(var1, var2 /* optional */, var3 /* optional */) {
if (var2===undefined) ...
(注意精確相等測試的三重等於。否則傳遞的null
值也將匹配。對於JS中的大多數比較,您通常需要===
,因為雙等於是不合需要的弱類型。)
因為當你有一個不確定數量的可選參數時,你通常會從函數語句中省略它們,並且評論是禮貌的:
function myFunc(var1 /* , optional var2..varN */) {
for (var i= 1; i<arguments.length; i++) ...
// 1. best way
function sum1(x = 1, y = 2) {
console.log(x + y)
}
sum1() // x=1,y=2
sum1(4, 5) // x=4,y=5
sum1(8) // x=8,y=2
// 2. Ternary way
function sum2(x) {
x = x !== undefined ? x : 1; // if x define x=x, if undefine x=1
console.log(x)
}
sum2(1)
sum2(5)
sum2('foo')
sum2()
// logical way
function sum3(x) {
x = x || 1; // x = either x if x is true or 1 if x is not false
console.log(x)
}
sum3(1)
sum3(5)
sum3('foo')
sum3()
為了歷史起見:您可以使用!= null
檢查循環您的參數。 例如 :
function container(param1, param2, param3, param4){
var param1, param2, param3, param4 = 0 // or other data types.
for (var i = 0; i < arguments.length; i++){
if(i != null) {
console.log(i); // or put default values to your parameters if you need to.
}
}
現在,所有參數都是可選的。
function connect(hostname, port, method) {
hostname = hostname || "localhost";
port = port || 80;
method = method || "GET";
}
Javascript中的重要URL 可選參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.