Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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
C#'有JavaScript等价物吗;参数';?_Javascript - Fatal编程技术网

C#'有JavaScript等价物吗;参数';?

C#'有JavaScript等价物吗;参数';?,javascript,Javascript,我需要一个可以有任意数量参数的方法。在C#中,我们有params语句。JavaScript中有类似的东西吗?JavaScript在函数中有参数对象。它包含传递给函数的所有参数 有arguments集合,其中包含传递给函数的所有参数 a)不需要在函数签名中指定“可选”参数,b)任何函数都接受任意数量的参数 function foo() { console.log(arguments); } foo(1,2,3,4); // logs [1, 2, 3, 4] 同样,在函数调用中也不需要提

我需要一个可以有任意数量参数的方法。在C#中,我们有
params
语句。JavaScript中有类似的东西吗?

JavaScript在函数中有
参数
对象。它包含传递给函数的所有参数


arguments
集合,其中包含传递给函数的所有参数

a)不需要在函数签名中指定“可选”参数,b)任何函数都接受任意数量的参数

function foo() {
  console.log(arguments);
}

foo(1,2,3,4);  // logs [1, 2, 3, 4]
同样,在函数调用中也不需要提供“必需”参数:

function foo(a, b, c, d) {
  console.log(arguments);
}

foo(1,2);  // logs [1, 2]
签名中命名但函数调用中未提供的任何参数都将
未定义

请注意,
参数
的行为类似于数组,但从技术上讲,它不是数组。例如,您可以调用
参数[0]
,但不能调用
参数.slice()
。要解决此问题,您可以使用阵列原型:

Array.prototype.slice.call(arguments, 1, 2);


所谓的
是对语言的一个新的(ES6+)补充,使使用可变函数更加舒适。解释它。

是的<代码>参数

function concatStrings () {
    var str = '';
    for (var i = 0; i < arguments.length; i++) {
        str += arguments[i];
    }
    return str;
}
函数concatStrings(){
var-str='';
for(var i=0;i

请注意,
arguments
不是数组,因此它没有像
join
push
这样的方法。它只是一个类似数组的对象(具有数值属性和
长度
属性),因此可以对其进行迭代。

它是特殊变量“arguments”中的某种隐式变量。这样使用:

function something(arg1, arg2) {
    for (var i = 0; i < arguments.length; i++) {
        var x = arguments[i];
    }
}
函数(arg1、arg2){
for(var i=0;i
然后你可以像
something(1,2,3,'a','b','c')那样称呼它。


这里还有更多示例:

默认情况下,Javascript函数可以接受任意数量的参数。您可以使用
参数
变量查看它们

看。

我知道这条线太旧了,但我相信这里少了一些东西。

有一个(在ECMAScript 6中引入),它允许我们将个数不定的参数表示为一个数组

它总是返回一个数组。这意味着即使是在防守区,也可以在没有守卫的情况下检查休息的长度。

语法:

rest参数和arguments对象之间有三个主要区别:

  • rest参数只是那些没有单独命名的参数,而arguments对象包含传递给函数的所有参数
  • arguments对象不是真正的数组,而rest参数是数组实例,这意味着可以直接对其应用sort、map、forEach或pop等方法
  • arguments对象具有特定于自身的附加功能(如callee属性)
  • 附加阅读:

    function(a, b, ...theArgs) {
    // ...
    }
    
    函数f(x,…y){ //y是一个数组 返回x*y.长度; } log(“预期结果:3*2=6,实际结果:+f(3,“hello”,true)); log(“预期结果:3*4=12,实际结果:+f(3,“a”,true,“b”,1)); //这里我们没有将任何内容传递给“y”,但它仍然可以安全地检查。“y”的长度,因为它总是返回一个数组。
    log(“预期结果:3*0=0,实际结果:+f(3))
    @Marcin,没有找到任何关于
    params
    ,你?这是
    参数
    ,它不是关键字。哎呀,我的错,当你同时做三件事时就会发生这种情况。已编辑。我认为这应该是预期的答案,因为它与params是真正的平行关系(即使不是所有人都可以使用ES6)@shirbr510请记住,您可以在数组中传递,而不是在C#中传递多个单独的对象,并且行为将是相同的。其中,如果使用spread操作符而不是多个单独的对象将数组传递到js函数中,行为将发生变化。这是由于每种语言的静态和动态约束造成的。