Array.prototype.pop引起的思考

348 阅读1分钟

关于Array的栈操作方法pop\push,饶有兴趣的找到了MDN的pop指南。 pop是如何执行的?,弹出数组最后一个元素,且返回最后一个元素。ECMA262用伪代码写出了pop执行过程

image.png

注意以下几点: 1.空数组返回undefined

2、通过设置数组长度(而不是删除某一个元素)弹出最后一个元素

3、pop改变了元数组

关于pop,类数组是不能使用该方法的,会报如下错误:

image.png

这是因为Array.prototype.pop,类数组是不能使用的,只有转换成数组才能用, 如何把类数组转换数组呢?

Array.prototype.slice

该方法可以转换成类数组为数组。 所以以下这种方式就不会报错了:

image.png

那么slice如何实现的呢?看MDN给出了答案

image.png

其实就是通过数组截取,用一个数组存储截取的元素,返回就可以了。这段代码是polyfill浏览器兼容脚本的实现方式,应该最能让人理解了。

通过以上过程,我的最大收获还是:多看看ECMA标准和MDN,看看原始的实现