Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,如何创建带有可选参数的函数?_Javascript_Html - Fatal编程技术网

在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的?标

问题:在JavaScript中定义带有可选参数的函数的正确方法是什么

例如:

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";
}