for in的详细讲解, for in遍历数组的毛病

1.index索引为字符串型数字,不能直接进行几何运算.

2.遍历顺序有可能不是按照实际数组的内部顺序

3.使用for in会遍历数组[所有的可枚举属性]。
包括[原型]。例如上栗的[原型方法]method和[name]属性 所以for in更适合遍历对象,尽量不要使用for in遍历数组。

for in中index索引为字符串型数字

var myArray=[1,2,4,5,6,7]

myArray.name="name数组"
for (var index in myArray) {
//这里可以说明是字符串型数字
console.log("字符串型数字===>", index +1)
//也说明了会遍历【可枚举属性】
console.log(myArray[index]);
}

for in中会遍历所有的可枚举属性

Object.prototype.say=function(){
  console.log('say');
}
var myObject={
  a:1,
  b:2,
  c:3
} for (var key in myObject) {
console.log('key值',key);
}

for in不遍历原型属性和原型方法

有些时候,不遍历原型属性和原型方法。
我们可以使用Object.hasOwnPropery(keyName)
hasOwnProperty()用于判断一个对象自身(不包括原型链)是否具有指定的属性。如果有,返回true,否则返回false。 Object.prototype.say=function(){
  console.log('say');
}
var myObject={
  name:'范轻舟',
  sex:'男',
  age:25
}
// 往对象上添加属性
myObject.likes='写代码'
// 往对象上添加属性
myObject['height']='1.80cm'
console.log(myObject )
for (var key in myObject) {
  if(myObject.hasOwnProperty(key)){
    console.log(key);
  }
}

获取对象上的所有key值

通过ES5的Object.keys(myObject)
获取[对象实例]【属性】组成的数组,不包括原型方法和属性 Object.prototype.say=function(){
  console.log('say');
}
var myObject={
  name:'范轻舟',
  sex:'男',
  age:25
}
let allkesy=Object.keys(myObject)
console.log( '获取对象上的所有key值', allkesy)
输出 ["name", "sex", "age"]

for-of遍历数组对象

let arr=[
{name:'张三',age:13},
{name:'张三',age:13},
{name:'张三',age:13}
] for(let cont of arr){
//输出 {name:'张三',age:13},
console.log(cont);
}

for-of遍历字符串

let  strCont="你好啊!Javascript"
for (const item of strCont) {
console.log(item);
}

for-of遍历数组新增一个key值

let arr=[
{name:'张三',age:13},
{name:'张三',age:13},
{name:'张三',age:13}
] for(let cont of arr){
cont['newkeys']=''
}

区别

1==》for in遍历的是数组的索引(即键名)。
而for of遍历的是数组元素值。 2==》for in 是es5中有的,for of是es6的 3==》for-in是为遍历对象而设计的,不适用于遍历数组。
它可以正确响应break、continue和return语句
for-in遍历数组的缺点:
因为for-in遍历的index值"0","1","2"等是字符串而不是数字
for-in循环存在缺陷:会遍历对象自身的和继承的可枚举属性(不含Symbol属性) 3==》for-of这个方法避开了for-in循环的所有缺陷
适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合
它可以正确响应break、continue和return语句

最后一句话

for in遍历对象
for of比那里数组

参考的地址:https://www.cnblogs.com/zjx304/p/10687017.html

js中for in和for of详细讲解的更多相关文章

  1. C++中的覆盖与隐藏(详细讲解)

    C++类中覆盖与隐藏一直是一个容易理解出错的地方,接下来我就详细讲解一下区别在何处 覆盖指的是子类覆盖父类函数(被覆盖),特征是: 1.分别位于子类和父类中 2.函数名字与参数都相同 3.父类的函数是 ...

  2. vue.js中ref及$refs的使用及讲解

    关于ref和$refs的用法及讲解,vue.js中文社区( https://cn.vuejs.org/v2/api/#ref )是这么讲解的: ref 被用来给元素或子组件注册引用信息,引用信息将会注 ...

  3. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  4. Java中数据库连接池原理机制的详细讲解

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  5. Java中数据库连接池原理机制的详细讲解(转)

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池 (Resource Pool).该模 ...

  6. JS中的数学计算<之简单实例讲解>

    1.取余数   % var a=10%3; //a=1 2.取绝对值  Math.abs() var a=Math.abs(-102.1); var b=Math.abs(102.1); //a=10 ...

  7. js中的json对象详细介绍

    JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...

  8. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

  9. 简述JS中 appy 和 call 的详细用法

    Apply 和 Call 两个老生常言的方法,使用过程的一些细节还是有很大的异同,具体使用情况可以参照下面例子详细回顾一下. 区别和详解:js中call()和apply()的用法 1.关于call() ...

  10. javaScript系列:js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

随机推荐

  1. webpack性能优化(1):分隔/分包/异步加载+组件与路由懒加载

    webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的,然后使用这个模块的时候,webp ...

  2. A/B实验背后的秘密:样本量计算

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一.前言 背景: AB实验具有一定前瞻性,统计性,科学性的特性.用好了就实现了在大数据时代的充分利用数据分析问题, ...

  3. 41. 干货系列从零用Rust编写负载均衡及代理,websocket与tcp的映射,WS与TCP互转

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  4. OS | 读者写者问题(读者优先,写者优先 ,读写公平)

    读者优先 读者优先的解决方案: 互斥信号量 wrt,初值是 \(1\),代表一个共享文件,解决 "读-写"互斥,"写-写"互斥. 一个记数器,即整型变量 rea ...

  5. 【每天一个不会秃头的前端案例】CSS + JS 实现早安,晚安动画

    从橘子学姐那边学来的 早安,晚安动画(CSS + js) 成果展示 先看成果. 通过点击太阳实现日夜的动画平滑交替 Movie 这里就不多说什么了,直接贴一下代码 HTML部分 <!DOCTYP ...

  6. SpringCloud学习 系列十、服务熔断与降级(1-简介)

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...

  7. oppo和海康嵌入式软件工程师面经总结

    目录 海康 一面(3.23,35min) 自我介绍 项目介绍 你做的这个项目遇到了那些问题,如何解决的? 移植uboot,只做了移植吗? 用的那个文件系统? 移植过程中,网卡驱动做了那些工作? 写过那 ...

  8. C#设计模式12——代理模式的写法

    1. 什么是代理模式? 代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问,以提供额外的功能或控制访问权限. 2. 代理模式的作用是什么? 代理模式可以为对象提供保护代理.远程代理 ...

  9. java 服务 JVM 参数设置配置

    本文为博主原创,转载请注明出处: 常用JVM 配置参数: -Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小. -Xms:表示java虚拟机堆区内存初始内存分配 ...

  10. # Linux操作补充

    取消高亮显示空格和Tab gvim ~/.vimrc # 在.vimrc文件中 set nohls # shell中执行 source ~/.vimrc ./vimrc是Gvim的配置文件 Gvim新 ...