Javascript 迭代对象和hasownproperty
我在这里查看克隆对象函数: 功能是:Javascript 迭代对象和hasownproperty,javascript,object,Javascript,Object,我在这里查看克隆对象函数: 功能是: 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不在对象ob
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循环中首先迭代
我遗漏了什么吗?中的“
for…”构造也在继承属性上循环
如果使用构造函数创建对象,例如:
var s = new String();
然后,属性中列出了所有可枚举的String
函数,但不作为own属性(即直接属性)列出。例如,在控制台中尝试以下操作:
for (var k in s) console.log(k)
您将发现一些有趣的函数,这些函数对于像formatUnicorn
这样的开发人员来说可能是必不可少的
此检查允许您克隆直接可枚举属性,而无需克隆原型属性
请参阅。中的for…in
构造也会在继承的属性上循环
如果使用构造函数创建对象,例如:
var s = new String();
然后,属性中列出了所有可枚举的String
函数,但不作为own属性(即直接属性)列出。例如,在控制台中尝试以下操作:
for (var k in s) console.log(k)
您将发现一些有趣的函数,这些函数对于像formatUnicorn
这样的开发人员来说可能是必不可少的
此检查允许您克隆直接可枚举属性,而无需克隆原型属性
请参阅。,因为原始循环还将显示原型对象的属性,这是您不想要的。因为原始循环还将显示原型对象的属性,这是您不想要的。值得一提的是,从JavaScript 1.8.5开始,您可以使用object.keys(obj)
获取在对象本身上定义的属性数组
(对于obj.hasOwnProperty(key)
,返回true的值)
这比使用for-in-loop更好(更可读)
以下浏览器支持它:
- 火狐(壁虎):4(2.0)
- 铬:5
- Internet Explorer:9
更多关于
值得一提的是,从JavaScript 1.8.5开始,您可以使用Object.keys(obj)
来获取在对象本身上定义的属性数组
(对于obj.hasOwnProperty(key)
,返回true的值)
这比使用for-in-loop更好(更可读)
以下浏览器支持它:
- 火狐(壁虎):4(2.0)
- 铬:5
- Internet Explorer:9
更多关于
可以从prototype继承。可以从prototype继承。@JanDvorak您添加的每个函数有时都是可枚举的-尤其是在较旧的实现中,您可能希望使用hasOwnPropertyName来过滤原型上的内容。@BenjaminGruenbaum是的,但大多数函数都是预先存在的,因此不可枚举。绝对不是“所有字符串函数”都是可枚举的。@JanDvorak您添加的每个函数有时都是可枚举的-尤其是在较旧的实现中,您可能希望使用hasOwnPropertyName来过滤原型上的内容。@BenjaminGruenbaum是的,但大多数函数都是预先存在的,因此不可枚举。绝对不是“所有字符串函数”都是可枚举的。