`
zhouyrt
  • 浏览: 1141688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

for in的缺陷

 
阅读更多

for in 语句用来列举对象的属性(成员),如下

var obj = { name:"jack",
      getName:function(){return this.name}
};
//输出name,getName	
for(var atr in obj) {
	alert(atr);
}

不知注意了吗,没有输出obj的toString,valueOf等内置属性(或称内置成员,隐藏属性和预定义属性)。即for in用来列举对象的显示成员(自定义成员)。

 

如果重写了内置属性呢,下面就重写obj的toString

var obj = {name:"jack",
      getName:function(){return this.name},
       toString:function(){return "I'm jack."}
};

for(var atr in obj) {
	alert(atr);
}

 

会输出什么呢?

1、IE6/7/8 下和没有重写toString一样,输出name,getName

2、firefox3/chrome2/opera9/safari4下则输出name,getName,toString

 

总结下:在跨浏览器的设计中,我们不能依赖于for in来获取对象的成员名称。即使用,要小心谨慎。

 

相关:

各浏览器中for in顺序的差异

 判断JS对象是否拥有某属性

 

2010-9-24

IE9 beta重写后可遍历,如{toString:function(){}}

 

 

分享到:
评论
4 楼 Sartner 2012-01-17  
额  ...
内置方法是在prototype中的
3 楼 Army 2009-06-11  
看来是ie下覆盖内置方法并不会修改方法的可枚举性。
2 楼 zhouyrt 2009-06-11  
yiminghe 写道
在Javascript 中 object 的 toString() ,toLocalString(),valueOf(),hasOwnProperty(),isPrototypeOf(),
propertyIsEnumerable() 都是不能枚举的内置方法。在 for in 语句中不能遍历到这些方法属性,不要依赖for in

alert({x:1}.propertyIsEnumerable('toString'));


嗯。基本上如此。
有一点,在重写对象的toString后,各引擎表现就不一样了。
IE6,7,8仍然不列举toString,但firefox,chrome,opera,safari会列举toString.
1 楼 yiminghe 2009-06-10  
在Javascript 中 object 的 toString() ,toLocalString(),valueOf(),hasOwnProperty(),isPrototypeOf(),
propertyIsEnumerable() 都是不能枚举的内置方法。在 for in 语句中不能遍历到这些方法属性,不要依赖for in

alert({x:1}.propertyIsEnumerable('toString'));

相关推荐

    关于js中for in的缺陷浅析.docx

    然而,`for...in`循环在实际应用中存在一些潜在的问题和缺陷,这些缺陷主要体现在以下几个方面: 1. **遍历顺序不固定**:`for...in`循环遍历对象属性时,并不保证属性的遍历顺序,这意味着在不同环境下,相同的...

    关于js中for in的缺陷浅析

    在介绍这些缺陷之前,我们首先要了解for in循环的基本用法和目的。for in循环会遍历对象的所有可枚举属性,并将每个属性名(键)赋值给循环变量,供循环体内部使用。 然而,for in循环有其局限性。首先,它不仅会...

    Javascript for in的缺陷总结

    JavaScript中的`for...in`循环是用来迭代对象的所有可枚举属性,包括那些从原型链继承而来的属性。然而,这个语法结构存在一些显著的缺陷,这些缺陷在处理不同浏览器和JavaScript环境时尤其需要注意。 首先,`for.....

    MISRA C_2012 Guidelines for the use of the C language in critical systems.pdf

    《MISRA C:2012 Guidelines for the use of the C language in critical systems》是MIRA Limited出版的一本关于C语言在关键系统中使用的指南,适用于汽车工业和其他对软件可靠性有极高要求的领域。MISRA(Motor ...

    深度学习IM-IAD工业图像缺陷检测框架学习

    使用趋动云平台复现论文源码IM-IAD: Industrial Image Anomaly Detection Benchmark in Manufacturing主要针对工业领域CV方向异常检测现阶段最先进的方法,构建一套统一开源框架便于后续研究者开发与使用,本文主要...

    hashin失效vumat,hashin失效准则介绍,Fortran

    在IT行业中,尤其是在科学计算和工程模拟领域,Hashin失效准则和VUMAT(User-Defined Material subroutine for Nonlinear Analysis in ABAQUS)是两个非常重要的概念。这两个概念主要应用于复合材料、土木工程等领域...

    基于yolov8实现热轧带钢表面缺陷检测源码+数据集+详细使用教程.zip

    《基于Yolov8实现热轧带钢表面缺陷检测的深度学习实践》 在现代工业生产中,确保产品质量是至关重要的。特别是在钢铁制造领域,热轧带钢的表面缺陷检测是一项关键技术,它能够及时发现并避免产品质量问题,提高生产...

    MISRA C2012 Guidelines for the use of the C language in critical systems.pdf

    MISRA C规则的目的是减少缺陷的发生,并促进代码的可读性、一致性和可维护性。例如,MISRA C规则要求使用const来保护那些不应该被改变的值,限制使用宏、避免不安全的函数,以及禁止使用动态内存分配等。这些规则...

    自动驾驶汽车的缺陷及其产品责任-王乐兵.pdf

    类似地,Sunghyo Kim的文章“Crashed Software: Assessing Product Liability for Software Defects in Automated Vehicles”分析了在自动驾驶汽车中,软件缺陷如何被认定为产品责任。 此外,文章还提到了欧洲共同...

    Failure assessment diagrams for use in R6 assessments for austenitic components

    R6程序的评估重点是组件中缺陷的裂纹起始能力,早期的版本由于对奥氏体材料应变硬化能力的不适应性,在进行缺陷评估时显得不适当。第三版R6修订通过允许引入材料的特有性质,拓宽了它的适用范围,使其适用于包括...

    SAP For all entries 的效率

    在本文中,我们将详细分析 "for all entries" 语句的缺陷,及其对性能的影响。 首先,让我们来看一下 "for all entries" 语句的基本用法。例如,我们有一个表 MARA,包含了物料的信息,我们想从这个表中选取出某些...

    MISRA C-2012 Guidelines for the C language in critical systems

    遵循MISRA C 2012规范的开发过程可以显著降低软件缺陷率,提高代码质量,使得软件在关键系统中的运行更加安全可靠。然而,由于这些规则严格且详细,实施起来可能会增加开发成本和复杂性,因此需要权衡项目的需求和...

    《BDD IN ACTION:Behavior-Driven Development for the whole software lifecycle》

    ### 《BDD IN ACTION:Behavior-Driven Development for the whole software lifecycle》 #### 行为驱动开发(Behavior-Driven Development, BDD)简介 行为驱动开发(BDD)是一种敏捷软件开发方法,它强调在整个...

    基于卷积神经网络的缺陷检测

    Surface defect detection plays a key role in controlling the quality during manufacturing process for strip steel. However, traditional defect detection of strip steel in industry is still performed ...

    基于改进Res-UNet网络的钢铁表面缺陷图像分割研究.docx

    steel surface defect recognition is an important task in industrial production, and traditional image processing methods have limitations in terms of accuracy and real-time monitoring. This paper ...

    深度学习领域yolov7算法在产品缺陷目标检测(带数据集)-detection-of-product-defects-usin

    Product defects are costly for businesses and can lead to financial and consumer health issues. The current dataset contains 168 image files with a total of 1859 jar lids, on average 11 per image. ...

Global site tag (gtag.js) - Google Analytics