鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
Given the for...in construct, what is the use of library-provided functions like jQuery.map() or _.each()?
似乎它正在重新发明本机提供的轮子,不是吗? 它真的值得额外的框架重量吗? 为什么这些框架觉得有必要将其定义为附加功能,而for...in
似乎可以很好地满足该功能的目的?
有一些很好的理由可以避免使用 for..in
遍历数组。
$.each
和_.each
在Javascript 1.6中引入Array.forEach
之前就已经存在了。
如果您执行以下操作:
for (var i = 0; i < 5; i += 1) {
document.getElementById('el' + i).onclick = function () {
alert(i);
};
}
然后,如果您单击每个元素,您将获得5
,因为它捕获上下文,并且i
变量在每种情况下都是相同的。
可以通过以下方式修复:
for (var i = 0; i < 5; i += 1) {
(function (i) {
document.getElementById('el' + i).onclick = function () {
alert(i);
};
})(i);
}
但是有了each
它就更好了,所以当你这样做时(不是很好的例子,只是为了演示(:
$('.el').each(function (i) {
$(this).click(function () { alert(i); });
});
然后它工作正常,因为当您在函数中传递变量时,上下文就会丢失。
>for ... in
还捕获原型链中的属性。 您必须使用 .hasOwnProperty()
方法来过滤掉内容。
继承问题
可以通过以下方式解决:
for (key in obj) {
if(obj.hasOwnProprty(key)) continue;
console.log("Property "+key+" has value "+obj[key].toString());
}
我看到一些管子上使用:
if (Object.prototype.hasOwnProperty(key)) continue;
。对于hasOwnProperty
过滤器,但我认为它本质上并不更安全,如果您在页面上包含修改了对象的 hasOwnProperty
属性的代码,那么 IDK 无论如何都要告诉您什么,除了代码就在那里^^ 如果你想要它,并找到一个新的库开始工作。 我的意思是,如果有人可以修改对象的hasOwnProperty
属性,那么有什么可以阻止他们修改Object.prototype.hasOwnProperty
呢?
无论如何,与继承财产问题的一些相关链接:
http://sugarjs.com/native
http://javascript.info/tutorial/native-prototypes
http://javascript.info/tutorial/inheritance
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty#Example:_Itarate_over_properties_not_considering_inherited_properties
我真的希望有人能帮助javascript.info
家伙维护他的教程的英文版本,因为它真的太棒了。
另一个问题...在
。是理论上不能保证迭代顺序。 如果你在处理一个数组,它不一定是索引的升序甚至降序。 规范留给供应商决定。 在实践中,我读到它或多/少是统一和可预测的,但这并不能保证是全部。
- 用Jquery map和moment js制作一个简单的时间线
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- jQuery Map 从多个源返回 JSON 对象
- 使用 jQuery.map 后使用 JSON.stringify 的问题
- 带有jquery.min.map的Ruby on Rails:未能加载资源状态406
- Chrome RangeError:使用jQuery$.map时超过了最大调用堆栈大小
- jQuery“map”将中的数组转换为“dom”元素
- 如何在纯JS中实现jQuery.map()的等效功能
- 为什么我的jQuery.map不能在这里组合我的数组
- jQuery在使用Bootstrap 3的Google Map v3的信息窗口中工作不完美
- 将Jquery拖放到Google Map V3
- jquery map 数组在迭代器中返回 NaN
- 如何使用jQuery.map递归修改嵌套对象
- 在jQuery上正确使用map
- 如何使jQuery .map只向数组添加填充的输入
- 在 Leaflet Map 上显示 jQuery 动态 GeoJSON 内容
- 在 Jquery 中的 .map 对象上使用 If 语句
- 创建Javascript/JQuery后检索Google Map对象
- 可以在jQuery/Javascript中有条件地$.map项目
- javascript .replace and jQuery .map