js的for..in语句的用法详解
2016-04-06 16:18
836 查看
语法:
for(variable in object)
statement
variable 是声明一个变量的var语句,数组的一个元素或者是对象的一个属性
在循环体内部,对象的一个属性名会被作为字符串赋给变量variable。
注意:对象的有些属性以相同的方式标记成了只读的,永久的(不可删除的)或者不可列举的,这些属性使用for/in循环不能枚举出来。虽然所有的用户定义的属性都可以枚举,但是许多内部属性,包括所有的内部方法都是不可枚举的。另外对象可以继承其他对象的属性,那些已继承的用户定义的属性可以使用for/in 循环枚举出来。
for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代。
例如:
var a = ["a","b","c"]; var a = ["a","b","c"];
for(var el in a){ 等价于:
for(var i=0,len=a.length;i<a.len;i++){
console.log(a[el]);
console.log(a[el]);
} }
但是当:
var a = {"first":1,"second":2,"third":3};
这个时候就只能用for in来穷举了。
一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:
object.propertyIsEnumerable(propname)是否可以通过for/in循环看到属性
propname 一个字符串,包含object属性的名称
如果object具有名为propname的非继承属性,而且该属性是可枚举的(即用for/in循环可以枚举它),则返回true
描述:
用for/in语句可以遍历一个对象"可枚举"的属性,但并非一个对象的所有属性都是可枚举的,通过JavaScript代码添加到对象的属性是可枚举的,而内部对象的预定义属性(如方法)通常是不可枚举的.
propertyIsEnumerable()方法不检测原型链,这意味它只适用于对象的局部属性,不能检测继承属性的可枚举性。
例如:
var o=new Object();
o.x=3.14;
o.propertyIsEnumerable("x"); //true
o.propertyIsEnumerable("y"); //false have not the property
o.propertyIsEnumerable("toString"); //false inherited
Object.prototype.propertyIsEnumerable("toString"); //false nonenumerable
for(variable in object)
statement
variable 是声明一个变量的var语句,数组的一个元素或者是对象的一个属性
在循环体内部,对象的一个属性名会被作为字符串赋给变量variable。
注意:对象的有些属性以相同的方式标记成了只读的,永久的(不可删除的)或者不可列举的,这些属性使用for/in循环不能枚举出来。虽然所有的用户定义的属性都可以枚举,但是许多内部属性,包括所有的内部方法都是不可枚举的。另外对象可以继承其他对象的属性,那些已继承的用户定义的属性可以使用for/in 循环枚举出来。
for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代。
例如:
var a = ["a","b","c"]; var a = ["a","b","c"];
for(var el in a){ 等价于:
for(var i=0,len=a.length;i<a.len;i++){
console.log(a[el]);
console.log(a[el]);
} }
但是当:
var a = {"first":1,"second":2,"third":3};
这个时候就只能用for in来穷举了。
一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:
object.propertyIsEnumerable(propname)是否可以通过for/in循环看到属性
propname 一个字符串,包含object属性的名称
如果object具有名为propname的非继承属性,而且该属性是可枚举的(即用for/in循环可以枚举它),则返回true
描述:
用for/in语句可以遍历一个对象"可枚举"的属性,但并非一个对象的所有属性都是可枚举的,通过JavaScript代码添加到对象的属性是可枚举的,而内部对象的预定义属性(如方法)通常是不可枚举的.
propertyIsEnumerable()方法不检测原型链,这意味它只适用于对象的局部属性,不能检测继承属性的可枚举性。
例如:
var o=new Object();
o.x=3.14;
o.propertyIsEnumerable("x"); //true
o.propertyIsEnumerable("y"); //false have not the property
o.propertyIsEnumerable("toString"); //false inherited
Object.prototype.propertyIsEnumerable("toString"); //false nonenumerable
相关文章推荐
- js图片滚动
- JS中六种数据类型(一)――undefined
- js事件冒泡和捕获
- js时间 字符串相互转化
- jsp与servlet
- VS 2008 jsoncpp的配置及使用实例
- js将类数组转成数组
- Javascript写入txt和读取txt文件示例
- JSON详解
- <%@include%>与<jsp:include>的区别
- 一个jsonp的简单实例
- Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
- JS中判断null、undefined与NaN的方法
- js中时间戳转化成时间格式
- 【笔记】 《js权威指南》- 第14章 Window对象 14.8 多窗口和窗体
- javascript跳跃式前进(3) - 跳入JSON
- javascript跳跃式前进(3) - 跳入JSON
- javascript 中 slice()、substr() 和subString()使用
- angualrjs动态加载分析
- JavaScript javaScript中的Date 以及对原生javaScript的扩展