下面说一下for… in语句。可直接把下面的代码复制到浏览器的控制台或Node环境下去执行。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//用来快速迭代对象。

var o ={name:'dylan',age:24,num:110};
for(var test in o){
  console.log("o["+test+"]= "+o[test]);
}
console.log("~~~~~~~~~~~")
Object.prototype.getName =function(){return this.name};
o.getAge=function(){returnthis.age};

for(var test in o){
  console.log("o["+test+"]= "+o[test]);
}
console.log(o.getName()+o.getAge());

//getName并不是o的方法,它是Object原型方法,而Object原型方法会被

//所有Object类型实例对象所继承的.

//因此可以看出使用for...in语句不仅能迭代出对象的属性,还可迭代出其原型方法。

console.log("~~~~hasOwnPyroperty~~~~~~~");
for(var test in o){
  if(o.hasOwnProperty(test)){
  console.log("o["+test+"]= "+o[test]);
  }
}

//通过调用hasOwnProperty方法过滤原型中的方法。

//如果o有二个undefined和null属性呢?.

o.undefined ='undefined';
o.null = 'null';
console.log(o);
console.log(o.toString());
console.log(o.valueOf());
for(var test in o){
  if(o.hasOwnProperty(test)){
  console.log("o["+test+"]= "+o[test]);
  }
}

//如果 o=null;

o=undefined; //o=null;
for(var test in o){
  if(o.hasOwnProperty(test)){
  console.log("o["+test+"]= "+o[test]);
  }
}

//既不会报错,也不会输出。但如果是在低版本浏览器,很有可能报异常。因此在使用

//for-in之前,可以先过滤一下迭代对象是否为null或undefined.

console.log("~~~~Iteratearray~~~~~~~");

//迭代数组可以吗?

var a = [26,'hellworld',newDate()];
for(var pro in a){
  console.log("a["+pro+"]="+a[pro]);
}

//Array也是一种对象,因此原型的getName方法同样被迭代出来。

function keys(obj){
var aRaa = [];
var i=0;
for(aRaa[i++] in obj);
  return aRaa;
}
console.log(keys(o));
a.index = a.length;
console.log(a);
console.log(keys(a));

//当你以为是对象数组时,执行下面一条语句,发现又会发错。

//console.log(a[index]); //报错,index未定义

//但是下面这条语句不会报错。

console.log(a.index);
console.log(a[getName]);

//当迭代数组时,尽量少用for....in 语句,这样可以减少不必要的错误。用下面的常用方法,更好!

for(var i=0,lenght =a.length;i<lenght;i++){
  console.log(a[i]);
};

【Dylan童鞋】

关注Dylan童鞋,请搜索微信号:DylanTongXue 。

推送时间为:周一,周三,周四,周日晚上9:20分左右。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

查看历史记录请回复1~9之间的数字。比如查看第六篇文章直接回复数字:6 。显示本帮助菜单,回复"H"。

最新文章

  1. C#中实现并发的几种方法的性能测试
  2. BZOJ2818 Gcd
  3. AC_Dream 1224 Robbers(贪心)
  4. c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
  5. 发布《Linux工具快速教程》
  6. Azure Backup 简介
  7. QSplashScreen开机画面(不断的repaint)
  8. JavaScript自我学习之解析与执行
  9. 整理网站优化(SEO)的方案
  10. 虽然net人
  11. 隐式意图-activity
  12. WP 开发中.xaml 与.xaml.cs
  13. white-space详解
  14. CSS基础布局--居中对齐,左侧定宽右侧自适应
  15. 在MacOS中,Unity使用VSCode开发,4.7版本无法正常使用C#
  16. hdu2669与hdu1576(扩展欧几里德)
  17. CSS3扁平化Loading动画特效
  18. vue render里面的nativeOn
  19. 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
  20. Solidity通过合约转ERC20代币

热门文章

  1. Java设计模式(四) 装饰 代理模式
  2. Unity3D环境GLSL shaders书面 — 固体参数
  3. javascript中数组常用方法总结
  4. 2440裸 Delay(); 和 while(!(rUTRSTAT0 &amp;amp; 0x2)); 问题
  5. Oracle\MS SQL Server Update多表关联更新
  6. selenium+Eclipse+testNG读取XML内容登陆系统
  7. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]
  8. jmeter之自定义java请求性能测试
  9. Android分析应用程序的构建过程
  10. 上海及周边地区产品技术创业QQ群:98905958