Javascript 参数对象类型转换
我是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
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。尽管它到底是如何工作的还有一些谜团。我找不到任何东西。可能是类型转换,但我不这么认为。谢谢易卜拉欣。