Javascript数组推送代码在内部是如何工作的

Javascript数组推送代码在内部是如何工作的,javascript,arrays,Javascript,Arrays,javascript中推送和弹出方法的内部代码逻辑是什么。。??Push方法如何将值存储在数组中。Push方法和pop方法是有意通用的,它们只依赖于长度属性的存在,并且可以添加和删除属性 push方法将读取length属性,添加具有该名称的属性,并增加长度。基本上: function push(value) { var len = this.length; this[len] = value; len++; this.length = len; return len; }

javascript中推送和弹出方法的内部代码逻辑是什么。。??Push方法如何将值存储在数组中。

Push方法和pop方法是有意通用的,它们只依赖于
长度属性的存在,并且可以添加和删除属性

push
方法将读取
length
属性,添加具有该名称的属性,并增加长度。基本上:

function push(value) {
  var len = this.length;
  this[len] = value;
  len++;
  this.length = len;
  return len;
}
function pop() {
  var len = this.length - 1;
  var value = this[len];
  this.length = len;
  delete this[len];
  return value;
}
pop
方法将读取
length
属性,减小它,获取具有该名称的属性并删除该属性。基本上:

function push(value) {
  var len = this.length;
  this[len] = value;
  len++;
  this.length = len;
  return len;
}
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();

演示:

推送
和弹出方法是有意通用的,它们只依赖于
长度
属性的存在,并且可以添加和删除属性

push
方法将读取
length
属性,添加具有该名称的属性,并增加长度。基本上:

function push(value) {
  var len = this.length;
  this[len] = value;
  len++;
  this.length = len;
  return len;
}
function pop() {
  var len = this.length - 1;
  var value = this[len];
  this.length = len;
  delete this[len];
  return value;
}
pop
方法将读取
length
属性,减小它,获取具有该名称的属性并删除该属性。基本上:

function push(value) {
  var len = this.length;
  this[len] = value;
  len++;
  this.length = len;
  return len;
}
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();

演示:

答案和JavaScript运行时一样多。每个JavaScript引擎的答案都会有所不同。您必须查看每个源代码(并非总是可用的),以了解其工作原理。例如,。答案的数量和JavaScript运行时的数量一样多。每个JavaScript引擎的答案都会有所不同。您必须查看每个源代码(并非总是可用的),以了解其工作原理。例如,。感谢您详细的回答,非常感谢。!!我的目标是创建一个customArray()对象,类似于Array()的克隆。现在,在推送我的所有元素之后,如何在推送到myCustomArray()中的每个对象之间进行链接。“var values=new CustomArray('xyz','xxx','yzx');”类似于值在其中的存储方式。@dcheepurapalli:数组中的项作为属性存储在对象中。第一项只是名为
“0”
的属性,第二项只是名为
“1”
的属性,依此类推。这就是为什么
push
pop
方法很乐意使用对象而不是数组,只要它有
length
属性。太棒了。。!!非常感谢@Guffa感谢您详细的回答,非常感谢。!!我的目标是创建一个customArray()对象,类似于Array()的克隆。现在,在推送我的所有元素之后,如何在推送到myCustomArray()中的每个对象之间进行链接。“var values=new CustomArray('xyz','xxx','yzx');”类似于值在其中的存储方式。@dcheepurapalli:数组中的项作为属性存储在对象中。第一项只是名为
“0”
的属性,第二项只是名为
“1”
的属性,依此类推。这就是为什么
push
pop
方法很乐意使用对象而不是数组,只要它有
length
属性。太棒了。。!!非常感谢@Guffa