Javascript 检测本机原型与扩展原型

Javascript 检测本机原型与扩展原型,javascript,Javascript,在某些第三方库中,阵列原型进行了扩展: Array.prototype.repeat = function(value, length) { while (length) this[--length] = value; return this; }; 代码: 期望: 1 2 3 结果: 1 2 3 repeat 我的代码如何正确地确定超出正常原型的属性并跳过它们?给定有问题的代码,您可以使用for或for..of循环来迭代数组在JavaScript中有许多方法可以迭代数组。

在某些第三方库中,阵列原型进行了扩展:

Array.prototype.repeat = function(value, length) {
    while (length) this[--length] = value;
    return this;
};
代码:

期望:

1
2
3
结果:

1
2
3
repeat

我的代码如何正确地确定超出正常原型的属性并跳过它们?

给定有问题的代码,您可以使用
for
for..of
循环来迭代数组

在JavaScript中有许多方法可以迭代数组。当选择一个时,你可能需要考虑下面的

  • 浏览器支持(请注意,如果您使用Babel等transpiler,则您可以自由选择任何一种)
  • 效率(尽管许多现代浏览器优化了
    数组上的方法。原型
    它们仍然比循环的标准速度慢)
  • 可读性(应该清楚代码部分负责什么,有些模式比其他模式更适合某些情况)
  • 不变性(已观察到应避免状态中的隐式更改,因此使用迭代器是一个好习惯,可以保证迭代数组的不变性。)
根据我自己的观察,我可以看出
Array.prototype.map()
是使用Transpiler和函数式编程范例的开发人员的首选选项

For循环
for..in
虽然不建议使用
for..在
中迭代数组,但可以使用
Object.prototype.hasOwnProperty()
进行迭代,如下代码片段所示

for (const p in model.features) {
  if (model.features.hasOwnProperty(p)) {
    console.log(model.features[p]);
  }
}
导致

1
2
3
for..of
但是,您可以使用
for…of
,这是处理数组时的建议

for (const feature of model.features) {
  console.log(feature);
}
用于
如果您不使用transpiler,并且希望确保代码在任何浏览器上都能工作,那么这是您的最佳选择

for(var i = 0; i < model.features.length; i++) {
  console.log(model.features[i]);
}
Array.prototype.map()

您需要检查
.hasOwnProperty
请参见此处的工作代码->

或者您也可以在

for (var p of model.features) {
                console.log(p);    
}

如果图书馆有你不喜欢的东西,不要使用它。但是,在JS中的数组上不使用in
有几个原因。这只是一个,对。不要将
用于。。。在
中迭代数组。这个
.repeat()
方法也很有问题。如果传入一个负数怎么办?这是什么库?现在它更慢了,而且不必要的冗长。那
.forEach()
呢?值得注意的是,
for…of
在IE中不起作用。我最终用
.forEach()做了我想做的事
但它也和检查
hasOwnProperty一样冗长。如果您希望获得尽可能好的支持,您应该使用普通for循环。有许多方法可以迭代数组,包括
for
map
for..of
,以及
forEach
。我已经给出了这些例子,因为这是你的问题。
arr.forEach((value, index, array) => {

});
arr.map((value, index, array) => {

});
for (var p of model.features) {
                console.log(p);    
}