Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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_Function - Fatal编程技术网

Javascript 参数对象类型转换

Javascript 参数对象类型转换,javascript,function,Javascript,Function,我是JavaScript领域的初学者,我有一个问题,下面是一个简单的例子 function myFun(){ return arguments; } var myVar=myFun("a","b","c"); //1 console.log(myVar); //=>//["a", "b", "c", callee: function, Symbol(Symbol.iterator): function] //2 for(m in myVar){ console.lo

我是JavaScript领域的初学者,我有一个问题,下面是一个简单的例子

function myFun(){
    return arguments;
}

var myVar=myFun("a","b","c"); 

//1
console.log(myVar); //=>//["a", "b", "c", callee: function, Symbol(Symbol.iterator): function]

//2
for(m in myVar){
    console.log(m); //will generate only the realistic arguments "a","b","c".
}
根据上面的片段, 为什么第一个调用要使用从函数主对象继承的属性生成arguments对象,而第二个调用只生成实际参数

例如,如果我们将arguments对象传递给第二个函数,为什么只传递实际数据

function foo(something) {
console.log(something); ///=>this will generate number 3 as parameter only, not the rest of the object
 return this.a + something;
}
var obj = {
 a: 2
};
var bar = function() {
 return foo.apply( obj, arguments );
};
var b = bar( 3 ); // 2 3

正如console.log(something)一行所指出的,它将只生成真实的参数,如@ibrahim mahrir注释和本文 我发现apply会将对象类型转换为数组,这是一个例子

  function toArray(args) {
    return Array.prototype.slice.call(args);
}

function firstFun(){
   console.log(toArray(arguments));
}
firstFun("A","b");
///这将等于,问题本身提供的第二个例子,
谢谢@ibrahim,正确的答案属于他。

下一个例子中的错误是有趣的:

函数foo(){}

foo.apply(空,5)根据:for…in
语句迭代对象的可枚举属性。伊布:好的,那么第二个例子呢?arguments对象作为参数传递给另一个函数时,它将仅与可枚举属性一起传递。由于每个函数都有自己的
arguments
对象,因此
secondFun
arguments
对象将是包含另一个对象的对象(
firstFun
arguments
对象)。
apply
的工作原理不同,
apply
需要一个数组,因此如果传递类似数组的对象(
arguments
对象是类似数组的对象),则只获取使其看起来像数组的属性。
“0”、“1”、“2”,…
其余的都被忽略了。我正在寻找一个参考。虽然这里没有发生“类型转换”。同意@pvg。尽管它到底是如何工作的还有一些谜团。我找不到任何东西。可能是类型转换,但我不这么认为。谢谢易卜拉欣。