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小时内与您取得联系。