作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
原问题:Loop through array in JavaScript
在Java中,可以使用改进的for()
循环来遍历一个数组:
String[] myStringArray = {"Hello","World"};
for(String s : myStringArray)
{
//Do something
}
在JavaScript中对数组的遍历也能这样简洁方便么?
JavaScript中的for
语句有两种形式:
// for
for (initialization; condition; update) {
statements
}
// for...in
for (variable in object) {
if (filter) {
statements
}
}
第一种for语句跟Java中一样,它是遍历 _(Iteration)_。第二种为枚举 _(Enumeration)_,我们称其为for...in
语句,它有点特别。
关于Iteration和Enumeration的区别,请参考:Enumeration VS Iteration
从形式上可以看出,for...in
是用来*遍历一个对象的所有属性(Properties)*的。
因此这是一个递归定义。
对于一个对象的属性*(Object Properties)*,我们从其性质和来源两方面来分析。
性质:* 属性(Property)本身是一个对象,有一个名字* 属性(Property)包含若干个attributes,包括value, enumerable, configurable, writable。这些attributes定义了存取这个属性的权限
来源:
由于Prototype Chain机制,一个JavaScript对象会自动地*拥有*其Prototype Chain上游对象的属性。
这两类属性的性质是不同的,具有不同的存取权限。
为了区分一个对象的属性的来源,JavaScript为Object对象提供了hasOwnProperty(key)
方法。
因此,如果你使用for...in
且只想遍历你的自定义对象的自定义属性,那么需要使用hasOwnProperty(key)
方法。
for (variable in object) {
if (object.hasOwnProperty(variable)) {
statements
}
}
我是一名优秀的程序员,十分优秀!