gpt4 book ai didi

javascript - 参数对象类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:10 25 4
gpt4 key购买 nike

请问我是 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".
}

根据上面的代码片段,为什么第一次调用会生成具有从 Function 主对象继承的属性的参数对象,而第二次调用只会生成实际参数。

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

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) 行中所指出的,它只会生成真实的参数

最佳答案

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

function foo() { }

foo.apply(null, 5);

错误说(在谷歌浏览器上):

CreateListFromArrayLike is called on non-object.

很明显 apply 在将参数传递给函数之前先调用该函数,CreateListFromArrayLike 将从提供的对象(或数组)中创建一个新对象(或数组),忽略任何非-过程中的类似数组的属性。

注意:在 mozilla firefox 上,它会引发不同的错误,但我认为这两种浏览器的引擎都具有相同的实现 apply 的方式。

关于javascript - 参数对象类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com