javascript - JS为什么可以用{length:20}来伪装成为20个undefined元素的arguments

查看:103
本文介绍了javascript - JS为什么可以用{length:20}来伪装成为20个undefined元素的arguments的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看Vue的官方文档的时候看到这么个奇技淫巧.
就是通过{length:20}来伪装成为包含了20个undefined元素的数组arguments.
举个例子的话就是这样:

function returnArguments(){
    return arguments;
}
var args = returnArguments.apply(null,{length:20})
console.log(args);
//[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

这背后的原理是怎样的? apply函数在将第二个参数转变为arguments时做了怎样的处理?
要知道new Array(20)或者[].length=20都不会往数组里面添加任何的内容的,
new Array(20).forEach(()=>console.log(1))也是不会打印任何内容的.
而为什么上述Vue官网的使用中却能得到真正填充了undefined的数组?

解决方案

直接贴地址吧:
apply 工作步骤
http://ecma-international.org...
[[Get]] (P) 工作步骤
http://ecma-international.org...
希望可以帮助题主。
PS:一些不是特别明白的问题可以到ECMA上面看一下引擎的具体实现步骤,
有的时候会有意想不到的收获.

这篇关于javascript - JS为什么可以用{length:20}来伪装成为20个undefined元素的arguments的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆