全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Javascript for in的缺陷总结

Javascript 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、IE9/Firefox/Chrome/Opera/Safari下则输出name,getName,toString 

如果给内置原型添加属性/方法,那么for in时也是可遍历的

Object.prototype.clone = function() {}
var obj = {
  name: 'jack',
  age: 33
}
// name, age, clone
for (var n in obj) {
  alert(n)
}

给Object.prototype添加了方法clone,for in时所有浏览器都显示了clone。

这或许还没什么,因为一般不建议去扩展内置构造器的原型,这也是Prototype.js走向没落的原因之一。jQuery和Underscore没有扩展自原型,前者在jQuery对象上做文章,后者索性将所有方法都挂在下划线上。

但有时我们为了兼容ES5或后续版本,会在不支持ES5的浏览器上(IE6/7/8)去扩展内置构造器的原型,这时for in在各浏览器中就不同了。如下

if (!Function.prototype.bind) {
  Function.prototype.bind = function(scope) {
    var fn = this
    return function () {
      fn.apply(scope, arguments)
    }
  }
}
function greet(name) { 
  alert(this.greet + ', ' + name)
}
for (var n in greet) {
  alert(n)
}

IE6/7/8输出了bind,其它浏览器则无。因为现代浏览器中bind是原生支持的,for in不到,IE6/7/8则是给Function.prototype添加了bind。

总结下:在跨浏览器的设计中,我们不能依赖于for in来获取对象的成员名称,一般使用hasOwnProperty来判断下。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Javascript  # for  # in的缺陷  # js  # in缺陷总结  # js字符串的各种格式的转换 ToString  # Format  # javascript 循环语句 while、do-while、for-in、for用法区别  # JavaScript中for..in循环陷阱介绍  # 在Linux上用forever实现Node.js项目自启动  # 关于js中for in的缺陷浅析  # JavaScript中for-in遍历方式示例介绍  # 得到form下的所有的input的js代码  # 为javascript添加String.Format方法  # js使用for循环与innerHTML获取选中tr下td值  # js在指定位置增加节点函数insertBefore()用法实例  # 重写  # 还没  # 则是  # 遍历  # 下划线  # 会在  # 希望能  # 写了  # 自定义  # 不支持  # 什么呢  # 挂在  # 原因之一  # 谢谢大家  # 中就  # 上做  # 或称  # 这也是  # 器中  # 器上 


相关文章: 如何在宝塔面板创建新站点?  如何在搬瓦工VPS快速搭建网站?  ppt制作免费网站有哪些,ppt模板免费下载网站?  Python多线程使用规范_线程安全解析【教程】  如何选择CMS系统实现快速建站与SEO优化?  建站之星北京办公室:智能建站系统与小程序生成方案解析  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何获取免费开源的自助建站系统源码?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何用PHP快速搭建CMS系统?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  css网站制作参考文献有哪些,易聊怎么注册?  七夕网站制作视频,七夕大促活动怎么报名?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  如何快速搭建支持数据库操作的智能建站平台?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  ,sp开头的版面叫什么?  如何选择美橙互联多站合一建站方案?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Android使用GridView实现日历的简单功能  如何快速查询网站的真实建站时间?  建站主机解析:虚拟主机配置与服务器选择指南  北京专业网站制作设计师招聘,北京白云观官方网站?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  IOS倒计时设置UIButton标题title的抖动问题  如何选购建站域名与空间?自助平台全解析  西安大型网站制作公司,西安招聘网站最好的是哪个?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  如何在香港免费服务器上快速搭建网站?  如何快速搭建高效可靠的建站解决方案?  如何在万网自助建站中设置域名及备案?  如何在万网ECS上快速搭建专属网站?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  定制建站是什么?如何实现个性化需求?  制作旅游网站html,怎样注册旅游网站?  视频网站制作教程,怎么样制作优酷网的小视频?  如何通过建站之星自助学习解决操作问题?  开源网站制作软件,开源网站什么意思?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何彻底卸载建站之星软件?  如何获取上海专业网站定制建站电话?  怀化网站制作公司,怀化新生儿上户网上办理流程?  宝塔建站助手安装配置与建站模板使用全流程解析  建站之星导航如何优化提升用户体验?  常州企业建站如何选择最佳模板?  建站之星后台密码遗忘?如何快速找回?  建站之星云端配置指南:模板选择与SEO优化一键生成 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。