如何编写高质量的Javascript代码(5)
来源:rockux 发布时间:2011-03-07 16:04:00
for-in循环
for-in循环用来迭代非数组的对象。使用for-in循环通常也成为枚举。
从技术上来说,你也可以用for-in来循环数组,因为数组也是对象,但是不推荐。如果数组有一些自定义的扩展函数,那么就会出错。另外,对象属性的顺序在for-in循环中也是不确定的。所以最好还是用普通的循环来循环数组用for-in来循环对象。
在循环对象的过程中,使用hasOwnProperty()方法来检验是对象本身的属性还是原型链上的属性很重要。
看看下面的这个例子。
// the object
var man = {
hands: 2,
legs: 2,
heads: 1
};
// somewhere else in the code
// a method was added to all objects
if (typeof Object.prototype.clone === "undefined") {
Object.prototype.clone = function () {};
}
在这个例子中,我们有一个简单的称作man的对象字面量。在其他man定义之前或之后的地方,对象原型有一个很有用的clone()方法。因为原型链的原因,所有的对象都自动获得了这个方法。为了在枚举man对象的时候出现clone方法,你需要使用hasOwnProperty方法来区别。如果没有区别来自原型链的方法,那么就会有一些意想不到的事情发生:
// 1.
// for-in loop
for (var i in man) {
if (man.hasOwnProperty(i)) { // filter
console.log(i, ":", man[i]);
}
}
/* result in the console
hands : 2
legs : 2
heads : 1
*/
// 2.
// antipattern:
// for-in loop without checking hasOwnProperty()
for (var i in man) {
console.log(i, ":", man[i]);
}
/*
result in the console
hands : 2
legs : 2
heads : 1
clone: function()
*/


猜你喜欢
- 1、单继承:子类只继承一个父类举例:煎饼果子老师傅在煎饼果子界摸爬滚打几十年,拥有一身精湛的煎饼果子技术,并总结了一套"古法煎饼果
- 示例代码: BulkStockBll bll = new BulkStockBll(); DataSet ds = bll.GetBulkS
- 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转。利用ajax技术和FormData()对象可以有效的解决
- 一、创建excel代码备注:封装好了(可直接调用)"""-*- coding:utf-8 -*-@Time :
- 今天给大家分享Listary v5.00.2843 2022年6月9日亲测可用注册码 ,是一款最新的激活码,有需要的朋友前来查看。Lista
- python使用qq邮箱(个人邮箱)发送邮件需开启qq邮箱的SMTP服务在设置中开启pop3/SMTP服务,返回的密码就是之后代码中登录使用
- 背景前段时间写了一个自动化安装 MySQL 的程序,其中有一个环节就是动态的渲染 my.cnf 文件;总的解决方案就是像 Django 渲染
- js中用import导入模块和用require导入模块的区别JavaScript中,模块是一种可重用的代码块,它将一些代码打包成一个单独的单
- mergemerge 函数通过一个或多个键将数据集的行连接起来。场景:针对同一个主键存在的两张包含不同特征的表,通过主键的链接,将两张表进行
- 上一次的错误太多,排版也出现了问题,重写了一遍,希望大家支持.循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和
- 子查询可以完成 SQL 查询中比较复杂的情况,本章主要介绍一些子查询的简单用法。一、简单子查询1、简单子查询子查询是 SELECT 语句内的
- 导语哈喽!大家晚上好,我是木木子吖,很久没给大家更新游戏代码的类型啦~骰子,是现在娱乐场所最常见的一种玩乐项目。一般骰子分两人和两人以上玩,
- 前言这是我之前安装的mysql5.7,然后想换成mysql8.0就有这篇,差不多跟着操作应该可以删除干净。一、你要先查询你是否安装了mysq
- MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、
- 在项目中时间一律显示为2014-10-20 10:22显得很呆板。在微博、QQ空间等网站通常会显示为几秒前,几分钟前,几小时前等容易阅读的时
- 将近两个多月没有敲linux命令,手指头不听话了。该再次温习卖油翁的故事了。曾为oracle如何启动多个实例运行纠结过,不服输心理。当时在一
- Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执
- pyqtgraph官方给的示例居然会报错2333官方文档传送门:#####pyqtgraph exportpyqtgraph支持在可视化窗口
- 前言在Selenium自动化测试过程中会遇到定位浏览器弹窗的情况,根据弹窗实现原理不同大致可分为以下几种定位方式。1. alert
- 相信大家都知道html和css,知道html结构和css表现分离,知道html语义化,这些都是这几年的热门关键字。语义化的html在国内也是