在JavaScript中,如何创建带有可选参数的函数?
问题:在JavaScript中定义带有可选参数的函数的正确方法是什么 例如:在JavaScript中,如何创建带有可选参数的函数?,javascript,html,Javascript,Html,问题:在JavaScript中定义带有可选参数的函数的正确方法是什么 例如: function myFunc(optionVar1) { if(optionVar1 == undefined) { ... } else { ... } } myFunc('10'); // valid function call myFunc(); // also a valid function call 在函数声明中使用类似Ruby的?标
function myFunc(optionVar1) {
if(optionVar1 == undefined) {
...
} else {
...
}
}
myFunc('10'); // valid function call
myFunc(); // also a valid function call
在函数声明中使用类似Ruby的?
标记表示可选参数是否合适:
function myFunc(optionVar1?) {...} // <--- notice the ? mark
函数myFunc(optionVar1?{…}/我发现的第一个google响应:
我还没有看到任何使用问号向调用者提示可选参数的实例。虽然它是用其他语言完成的,但我认为在javascript中没有必要这样做
其实,。只有字母、数字、$和u.Javascript中没有语法指定参数是可选的(或必需的)。所有参数都是可选的。如果未指定它们,则它们是未定义的,因此您需要对此进行检查。例如,此函数实际上将为参数创建默认值10:
function myfunc(someParam) {
if (someParam === undefined) {
someParam = 10;
}
...
}
还可以使用属性以编程方式访问参数
最后,如果您有3-4个以上的参数,通常建议使用匿名对象来代替。只是不要使用任何参数定义函数,而是从您希望使用可选参数的函数中访问特殊参数数组。下面的例子
<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>
函数foo(){
var argv=foo.arguments;
var argc=argv.length;
对于(变量i=0;i
实际上,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...
}
一些源会告诉您完全跳过参数,而是使用arguments数组。这允许您接受提供给函数的任何输入,并且您可以决定如何响应传递给函数的参数
您可以在此处阅读更多信息:
克莱特斯和达莫维萨提出了很好的建议。我还想补充一点,有些人(比如我自己)可能更喜欢这样的符号:
function foo(/*bar*/) {
if (arguments.length == 1) {
var bar = arguments[0];
...
}
}
这有助于向代码库的开发人员说明参数是可选的,也有助于说明参数的名称,但它还可以防止参数显示在调试器的函数名中(示例将显示为foo(),而不是foo(可选参数)。否则,使用API的开发人员可能会认为它是必需的
编辑:这对于打算在内部使用的可选参数特别有用
在函数声明中使用像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++) ...
函数myFunc(var1/*,可选var2..varN*/){
对于(var i=1;i,首先,所有编写JavaScript的人,请帮自己一个忙,然后从
函数的每个参数都是“可选的”,即使是在函数声明的参数列表中声明的参数
只需仔细考虑。
在使用DOCLE时,注释段中可以使用{ object = }或{编号}等注释:
/**
* @param {object=}xyz
*/
在本例中,“ttl”是可选的。注释{number=}向IDE指示此参数是可选的。因此,当您仅使用两个参数调用此函数时,不会得到警告
注释还可用于指定预期类型。这将使您的代码更好,更不容易出现错误。以下是注释链接:
出于历史原因:您可以使用!=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.
}
}
函数容器(param1、param2、param3、param4){
变量param1、param2、param3、param4=0//或其他数据类型。
for(var i=0;i
现在,所有参数都成为可选参数
function connect(hostname, port, method) {
hostname = hostname || "localhost";
port = port || 80;
method = method || "GET";
}
重要URL文章不幸没有帮助。真遗憾。参数声明允许指出哪些参数是必需的,哪些参数不是必需的。我已经更新了下面的答案,但简短的回答是否定的,问号不是变量名称允许的字符。这并不能帮助人们知道应该包含哪些参数虽然.typeof
返回一个字符串。使用typeof dist=='undefined'
,或者,我更喜欢的是,只使用dist=='undefined
。谢谢,我对此有点不清楚。在某些上下文中(即函数外部),执行if(randomvar==undefined)
产生一个错误-ReferenceError:randomvar没有定义
所以我使用typeof。我将添加引号。这可以在ES6函数myfunc(someParam=10){All the code…}中简化。
为什么这对我不起作用?*@param{string=}name可选的离开时间
我非常需要它。
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";
}