Javascript Array Push 代码如何在内部工作
How does the Javascript Array Push code work internally
javascript中Push and Pop方法的内部代码逻辑是什么..??推送方法如何将值存储在数组中。
push
和 pop
方法是有意泛型的,它们仅依赖于 length
属性的存在,并且可以添加和删除属性。
push
方法将读取 length
属性,添加具有该名称的属性,并增加长度。基本上:
function push(value) {
var len = this.length;
this[len] = value;
len++;
this.length = len;
return len;
}
pop
方法将读取 length
属性,减少它,获取具有该名称的属性并删除该属性。基本上:
function pop() {
var len = this.length - 1;
var value = this[len];
this.length = len;
delete this[len];
return value;
}
实际的实现稍微复杂一些,因为它们支持例如push
方法的多个参数,以及更多的错误检查。当对象实际上是一个数组时,也可能实现特殊的优化代码,但对于其他对象,通用代码仍然存在。
这些方法是有意泛型的,以便它们可以用于实际上不是数组的对象。您可以通过仅具有length
属性来创建自己的支持它们的对象:
var o = {
length: 0,
push: Array.prototype.push,
pop: Array.prototype.pop
};
o.push(1);
var one = o.pop();
演示:http://jsfiddle.net/Guffa/9r4gavzb/
我们可以尝试一些测试和测试行为:
const arr1 = []
const { push: push1 } = arr
const arr2 = []
const { push: push2 } = arr
console.log(push1 === push2) // true
console.log(push1 === Array.prototype.push) // true
push1(1) // TypeError: Cannot convert undefined or null to object
push1.call(arr1, 1) // arr1: [1], arr2: []
push2.call(arr1, 2) // arr1: [1, 2], arr2: []
push1.bind(arr2)(1) // arr1: [1, 2], arr2: [1]
push.call(arr2, 2)
我们可以说push
方法在引擎盖下使用this
......
相关文章:
- JS Promises如何在内部工作
- 为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
- CSS和Javascript可以在内部服务器上工作,但不能在外部工作
- 无法获得控制台.log在 CasperJS 中评估内部工作
- Javascript Array Push 代码如何在内部工作
- jQuery Content Switcher (无法使联系人表单在内部工作)
- GetVariable在方法内部工作
- Br在使用Jquery.html()时无法在P内部工作
- 颜色框代码在Umbraco外部工作,但在内部不工作
- yeoman生成器:复制或模板dos'不能在异步回调内部工作
- 代码在主页中工作,但不在内部目录中工作 - 仅显示加载
- 了解$.proxy如何在内部工作
- 为什么$(this)选择器在我的函数内部工作,而在外部工作
- canvas.width=canvas.width如何在内部工作
- 引导模式工作在内部页面,但不工作在主页
- setInterval只在if(){}块内部工作
- Jquery不能在函数内部工作
- Jquery平滑滚动只在内部工作
- Javascript在内部工作,而不是在外部
- “参数”对象如何在内部工作