js中for in语句的用法讲解


Posted in Javascript onApril 24, 2015
 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"];

for(var el in a){

alert(a[el]);

}

这个就是穷举出a中的所有元素,当然上面这个例子是可以用
for(var i=0,len=a.length;i<len;i++){

alert(a[i]);

}

这种方式进行循环列出的,不过有时候这种方式就不一定奏效了。
例如:
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
Javascript 相关文章推荐
为数据添加append,remove功能
Oct 03 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
js date 格式化
Feb 15 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
Vue瀑布流插件的使用示例
Sep 19 Javascript
Vue源码学习之关于对Array的数据侦听实现
Apr 23 Javascript
vue前后分离调起微信支付
Jul 29 Javascript
vue+element导航栏高亮显示的解决方式
Nov 12 Javascript
js实现数字滚动特效
Dec 16 Javascript
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
javascript中Set、Map、WeakSet、WeakMap区别
Dec 24 Javascript
JScript中的条件注释详解
Apr 24 #Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 #Javascript
js闭包实现按秒计数
Apr 23 #Javascript
jQuery中使用each处理json数据
Apr 23 #Javascript
javascript数组去重方法汇总
Apr 23 #Javascript
javascript实现英文首字母大写
Apr 23 #Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 #Javascript
You might like
javascript replace方法与正则表达式
2008/02/19 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python删除不需要的python文件方法
2018/04/24 Python
解决python删除文件的权限错误问题
2018/04/24 Python
替换python字典中的key值方法
2018/07/06 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
SQL语言面试题
2013/08/27 面试题
数据库方面面试题
2012/04/22 面试题
给客户的道歉信
2014/01/13 职场文书
争先创优公开承诺书
2014/08/30 职场文书
商家认证委托书格式
2014/10/16 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
民事和解协议书格式
2014/11/29 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS