与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性。 小结 当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误。
与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性。
复制代码 代码如下:
// 扩展 Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // 输出 bar 和 moo
}
我们不可能改变 for in 循环的行为,当需要对循环体内某些属性进行过滤时,可以利用Object.prototype的hasOwnProperty方法来完成。
提示:因为 for in 循环总是遍历整个原型链,所以当遍历多继承的对象时效率较低。
使用 hasOwnProperty 进行过滤
复制代码 代码如下:
// 仍旧针对上例的foo对象
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i);
}
}
例子中因为使用了hasOwnProperty,最终输出moo;如果忽略 hasOwnProperty ,代码将会输出非预期结果,因为本地原型(如Object.prototype)已经被扩展了。
Prototype框架就是扩展Javascript原始对象的一个类库,并被广泛使用,其缺点也很明显,当框架引入后,如果不使用 hasOwnProperty 进行过滤判断,输出结果保证不是你想要的。
最佳实践
推荐在 for in 时,总是使用 hasOwnProperty 进行判断,没人可以保证运行的代码环境是否被污染过。
hasOwnProperty
为了检查某个对象是否拥有不在原型链上的自定义属性,就有必要用到 hasOwnProperty 方法,任何一个对象都具有该方法,它继承自 Object.prototype。
提示:我们无法完全检测某个属性是否是undefined,因为属性有可能存在,但其值为undefined。hasOwnProperty 是Javascript中唯一一个可以处理对象属性而不遍历原型链的方法。
复制代码 代码如下:
// 扩展 Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};
foo.bar; // 1
'bar' in foo; // true
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
只有 hasOwnProperty 给出了正确的预期结果,当遍历对象的属性时这是很有必要的,没有其它办法来排除定义在对象原型链上的属性。
hasOwnProperty 作为属性
Javascript 并没有保护 hasOwnProperty 为关键字或保留字,因此,如果某个对象拥有同名的属性,就有必要利用扩展的 hasOwnProperty 来获取正确结果。
复制代码 代码如下:
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 总是返回 false
// 使用另一个 hasOwnProperty 并将 this 设置为 foo 来调用它
{}.hasOwnProperty.call(foo, 'bar'); // true
小结
当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误。
相关推荐:
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
seo站内优化包括什么营销,seo站内优化操作流程 ,ai 玻璃图标
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
seo软件叫什么,seo软件视频教程 ,eps ai 缩略图
SEO建站,开启网站优化的全新篇章!,网络营销推广合作方式
OpenAI推出的GPT-4Turbo大幅降低了AI应用成本,推动了AI技术的普及化,ai*版
seo需要买什么,seo需要考虑什么 ,ai做表头
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
为什么选择老域名注册,打造品牌价值的秘密武器,网站建设服务费用多少
SEO优化与SEM广告:提升品牌曝光与流量的双重利器,ai接回头
二次创作的魅力与潜力:创意无限的数字时代,天长外贸网站建设
“标题制造机”:颠覆内容创作的秘密武器,助你轻松打造吸引力十足的标题,景区线上推广用哪些网站
SEO就业前景如何?打造数字时代的职业新风口,常州武进区水产网站建设
ChatGPT出现报错503?这些解决办法你必须知道!,粉墨ai说唱
AI免费生成文本,内容创作新篇章
亚马逊产品seo什么意思,亚马逊平台产品专业术语 ,小新同学ai
SEO中权重是什么意思?让你迅速网站排名的核心秘密!,长颈鹿智能AI点读机
seo需要什么器械,seo需要什么器械才能做 ,长续航ai纯电汽车
SEO关键词的选择步骤:让你的网站在搜索引擎中脱颖而出,ai书法化
SEO量:提升网站流量和排名的关键法则,德兴seo
什么是SEO金融,seo是做什么的 ,ai中转程序
什么是seo公司口碑,seo品牌 ,ai大模型训练是什么意思
SEO是如何推动企业增长的关键力量,深圳罗湖网站建设设计
WP原创:打造属于你的独特网站,从这里开始!,一个网站推广一个月需要多少钱
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
如何用AI写公众号文章?让创作更高效、更轻松
产品经理seo是什么,产品经理seo是什么意思 ,ai政府公文写作 软件
seo网站是什么找行者SEO,seo分析网站 ,ai图文梅花
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
SEO赚钱:如何通过SEO技能在网络上实现财富自由,网站怎么建设推广平台
AI提炼主要内容:如何让信息更精准、高效、易懂,女军人ai
SEO导航:助力网站提升流量与排名的必备工具,荣昌建筑网站建设
ZBlog:开启你的个人网站新时代,轻松搭建与管理,二手手机营销推广方案
AI撰写工具的无限可能,让内容创作更高效、更精彩!
SEO开发:数字营销的核心驱动力,园区网站建设
用AI修改文章,提升写作效率与质量的新时代
ChatGPT空白对话:释放创意,开启智能对话的新世界,ai重庆南坪
人工AI软件的未来:智能时代的创新驱动力
seo需要什么人才,seo需要做什么工作 ,探索ai照片
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
亚马逊中什么是seo,亚马逊sop ,ai临摹中国名画
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
SEO就是:让你的品牌脱颖而出,获得更多曝光与流量,梅岭关键词排名优化
在线AI文章生成:智能写作的无限可能
ChatGPT无法加载?检查您的网络设置并尝试重启,轻松解决常见问题!,ai招生广告设计
SEM做得好可以取代SEO吗?浅析两者的异同与未来趋势,王道ai
OpenAIGPT:开启智能时代的语言革命,ai辣妹动漫
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
“更加通顺”-让生活与工作无缝衔接的语言魅力,SEO书架书桌收纳
seo需要什么人员,seo需要什么技能 ,画大学ai