C#'有JavaScript等价物吗;参数';?
我需要一个可以有任意数量参数的方法。在C#中,我们有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] 同样,在函数调用中也不需要提
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函数中,行为将发生变化。这是由于每种语言的静态和动态约束造成的。