gpt4 book ai didi

arrays - __proto__ 在哪里被添加到数组中?

转载 作者:行者123 更新时间:2023-12-04 06:03:27 27 4
gpt4 key购买 nike

曾经能够毫无问题地做到这一点:

for (data in dataArray) { // do some stuff };

现在,它突然迭代这个 __proto__添加到我的 dataArray 的数组.它到底是从哪里来的?这是来自使用 MooTools 库吗?它打破了我所有的循环! :P 现在我必须这样做:
for (var i=0; i < dataArray.length; i++) { // do some stuff };

我不明白的原因是为什么它有效... __proto__实际上不算作数组元素?如果不是,那为什么第一个版本不像以前那样工作,而第二个版本呢?

TIA 用于打开一些灯...

写!

最佳答案

不。 javascript是原型(prototype)的。这意味着任何东西(任何 native 类型)都可以通过修改其原型(prototype)来扩展。例如,如果您想添加一个新方法,允许您遍历以后可能创建的任何数组,您可以这样做:

Array.prototype.each = function(callback) {
// this == the array. code here...
return this;
};

这意味着创建的任何数组都将支持 .each 之后: [].each(function(el) {}); .是的,mootools 目前是一个非常典型的框架。事情正在随着 mootools 牛奶的改变而发生变化,它去了 AMD - 因此没有扩展本地人......

但是,最终,在 javascript 中,所有内容都通过原型(prototype)链从 Object native 继承。

至于 Array,它并不是真正合适的 Array 类型 - 在 javascript 中,它更像是一个具有类似数组属性的对象。这让我想到了为什么你会遇到问题:
for (var foo in obj)实际上是一种循环方式 Objects - 不是 Arrays .它也适用于数组,因为它们有点像我提到的对象。

但这是错误的做法,尤其是当您使用原型(prototype)框架或者您不确定您运行的所有代码以及它如何影响原型(prototype)链时。如果您打算使用其他语言中所谓的“关联数组”,只需使用 Object。

在 mootools 中,您可以使用 Object.each(function(value, key) {});迭代它们。

或者:在你的循环中检查项目 hasOwnProperty :
for (var data in dataArray) {
if (dataArray.hasOwnProperty(data)) {
// avoids working with prototype.
}
}

关于arrays - __proto__ 在哪里被添加到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com