js中for in和for of详细讲解

简介: js中for in和for of详细讲解

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]);
}


1425695-20211002104939273-1971308208.png

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);
}


1425695-20211002105100699-897508510.png

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);
  }
}


1425695-20211002105145265-1642866517.png


获取对象上的所有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比那里数组



相关文章
|
前端开发
UniApp 中的 image 属性讲解
UniApp 中的 image 属性讲解
1266 2
|
JavaScript 前端开发 API
vue element plus Cascader 级联选择器
vue element plus Cascader 级联选择器
1206 0
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
详谈什么是自然语言处理(NLP),特点以及使用场景场景(一)
详谈什么是自然语言处理(NLP),特点以及使用场景场景(一)
442 0
|
JavaScript 前端开发 索引
js添加、删除、替换、插入元素的方法
js添加、删除、替换、插入元素的方法
376 0
|
网络协议 Linux Shell
在Linux中,如何通过一个端口找到程序?
在Linux中,如何通过一个端口找到程序?
|
Arthas 监控 Java
慢调用链诊断利器-ARMS 代码热点
慢调用链诊断利器-ARMS 代码热点
360 77
|
前端开发 开发工具 Android开发
【服务器APP】利用HBuilder X把网页打包成APP
【服务器APP】利用HBuilder X把网页打包成APP
549 0
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
1282 0
|
JavaScript
如何在uni-app项目中使用路由
如何在uni-app项目中使用路由
270 0