为何Array.from()在不同网页执行会得到不同结果?
为什么相同的
Array.from代码在不同页面结果不同? 这是因为你访问的那个fellowshipone门户页面重写了全局的Array.from方法,覆盖了JavaScript的原生实现,导致它不再遵循标准的API行为。
具体原因拆解:
- 原生的
Array.from方法支持第二个参数作为映射函数,会遍历源数组的每个元素,将函数执行后的结果组成新数组返回——这也是你在MDN页面得到[2, 4, 6]的原因。 - 而该网站自定义的
Array.from应该是忽略了第二个映射参数,只是简单地把源数组复制后返回,所以你执行Array.from([1,2,3], x => x+x)时,完全没触发映射逻辑,直接得到了原数组的拷贝[1,2,3]。
验证方法:
你可以在该页面的Chrome控制台执行以下代码,确认是不是被重写了:
console.log(Array.from.toString())
- 如果是原生方法,输出会是
function from() { [native code] }; - 如果是网站自定义的,会显示具体的函数实现代码,能看到它没有处理第二个参数的逻辑。
这种修改原生对象方法的操作叫“猴子补丁”,有些网站会为了兼容旧浏览器或者实现特定业务逻辑这么做,但也容易引发这类不符合预期的API行为问题。
内容的提问来源于stack exchange,提问作者tviscon2
相关产品推荐
相关产品推荐

