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);
}