我正在制作一个类似 jQuery 的小型库,其中一个让我感到奇怪的事情是
在 JavaScript 中我们有一个
问题在于它也会迭代继承的属性,也就是来自对象构造函数原型的属性。例如,可以使用
$.each
的行为。在 JavaScript 中我们有一个
for...in
循环:for (var key in obj) {
console.log(key + ': ' + obj[key]);
}
问题在于它也会迭代继承的属性,也就是来自对象构造函数原型的属性。例如,可以使用
hasOwnProperty
来了解这一点。JQuery也可以这样做。但是,当你将一个对象传递给$.each
时,它的行为与for...in
完全相同,也会迭代继承的属性。 这也应该稍微慢一些,并且需要输入更多字符。请查看this fiddle以查看其实际效果,以及查看$.each
的源代码look here。所以我的问题是,jQuery中是否有仅包括自有属性的对象迭代方法?如果没有,那么库应该像这样运作吗?
编辑:由于jQuery不支持此操作,你也可以回答这是否有用。我的意思是,我不认为自己会想要遍历原型属性,但也许我漏掉了什么。
hasOwnProperty
。http://jsfiddle.net/mpTkA/2/ - Selvakumar ArumugamObject.keys()
。 - PointygetOwnPropertyNames
会更好。 - dmi3yfor
-in
时为key
使用var
:for (var key in obj)
。否则,您会获得意外的全球变量。(除非您真的希望key
是全局的,在这种情况下,您应该找到更好的方法来完成您想要做的事情)其他快速提示:在使用hasOwnProperty
时,保存引用比通过点符号调用它稍微更安全:var has = Object.prototype.hasOwnProperty; has.call({abc: 'xyz'}, 'abc');
。 - Keen