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 相关文章推荐
封装html的select标签的js操作实例
Jul 02 Javascript
form.submit()不能提交表单的错误原因及解决方法
Oct 13 Javascript
jquery序列化方法实例分析
Jun 10 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
详解javascript高级定时器
Dec 31 Javascript
js的三种继承方式详解
Jan 21 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
jQuery pagination分页示例详解
Oct 23 jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
Jun 18 jQuery
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
PHP生成唯一订单号
2015/07/05 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
JavaScript Prototype对象
2009/01/07 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
js面向对象编程总结
2017/02/16 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
初二生物教学反思
2014/02/03 职场文书
大学军训感言1000字
2014/02/25 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
合同协议书格式
2014/04/18 职场文书
钳工实训报告总结
2014/11/04 职场文书
大学四年个人总结
2015/03/03 职场文书
导游词之昭君岛
2020/01/17 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏