迭代一个对象并具有ownproperty
iteration an object and hasownproperty
我在这里看到了一个克隆对象函数:
http://jsperf.com/cloning-an-object/2
功能是:
function clone(obj) {
var target = {};
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
target[i] = obj[i];
}
}
return target;
}
我想知道为什么支票是
if (obj.hasOwnProperty(i))
需要吗?
因为如果属性i不在对象obj中,则不会在的循环中首先迭代它。
我是不是错过了什么?
for...in
构造也在继承的属性上循环。
如果您使用构造函数创建一个对象,例如:
var s = new String();
则在属性中列出了所有可枚举的String
函数,但不是作为自己的属性(即直接属性)。例如,在控制台中尝试以下操作:
for (var k in s) console.log(k)
您将发现一些有趣的函数,这些函数对于像formatUnicorn
这样的SO开发人员来说可能是必不可少的。
通过此检查,可以克隆直接可枚举属性,而无需克隆原型属性。
请参阅有关MDN的文档。
因为原始循环还将显示原型对象的属性,而这是您不想要的。
值得一提的是,从JavaScript 1.8.5开始,您可以使用Object.keys(obj)
来获取在对象本身上定义的属性数组(对于obj.hasOwnProperty(key)
返回true的值)。
这比在循环中使用for更好(并且可读)。
以下浏览器支持它:
- Firefox(Gecko):4(2.0)
- 铬:5
- Internet Explorer:9
有关的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
相关文章:
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 在Javascript中对类的每个实例调用一个方法
- 仅对一个输入按钮禁用应用
- 尝试对对象数组进行排序但拼接不是一个函数
- 如果语句为true,则对一个或多个ng进行角度检查
- 可以对一个图表进行高图深化,反映在另一个图表上
- 为什么JQueryshow()函数只对带有选择器的一个(而不是所有)元素起作用
- 什么对性能更好:每个元素的事件或一个具有委派的事件
- 根据对多个数组唯一的元素创建一个新数组
- 对添加另一个选项卡的onsubmit函数停止重定向
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用
- coffeescript/backline.js:编写一个对字符串进行操作的哈希函数
- javascript中的单元测试:如何模拟?-一个(对我来说很难)的例子
- 我如何检测一个对象是一个水线模型或模型集合在Sails.js
- 试图创建一个对数字求和的Javascript函数
- 给闭包内的变量赋值一个对闭包的引用——它会泄漏吗?
- Babel - TypeError: Plugin 1指定在"foreign"在调用时预期返回一个对
- 如何删除所有的列表项,但一个对一个(jQuery)