当前位置: 首页 > news >正文

自己建网站 怎么做后台/安徽百度seo公司

自己建网站 怎么做后台,安徽百度seo公司,网站排版代码,怎么样检查网站有没有做全站301听说你精通循环,我不信真正开始写业务逻辑,就离不开循环。而循环一直是编程中基础的基础。但是作为一个工作多年的前端程序员,一定还有人不了解循环的基础知识。下面我们一起来看看,在循环中如果改变了item的值会发生什么&#xf…

bcff92397cf9ce0c14149b549c14c930.jpeg

听说你精通循环,我不信

真正开始写业务逻辑,就离不开循环。而循环一直是编程中基础的基础。但是作为一个工作多年的前端程序员,一定还有人不了解循环的基础知识。

下面我们一起来看看,在循环中如果改变了item的值会发生什么:

forEach

改变item本身

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},Symbol(),'sss',[4,4,4,4],new Date()
]list.forEach(item => {item = 3
})console.log(list)复制代码
[{ name: 'a', count: 1 },2,[Function: fn],Symbol(),'sss',[ 4, 4, 4, 4 ],2022-09-13T10:40:17.322Z
]
复制代码

我们发现,基础类型的几个,string, number,Symbol()的内容都没有发生变化。

改变item的属性

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},Symbol(),'sss',[4,4,4,4],new Date()
]list.forEach(item => {item.count = 3
})console.log(list)
复制代码
[  { name: 'a', count: 3 },  2,  [Function: fn] { count: 3 },Symbol(),'sss',[ 4, 4, 4, 4, count: 3 ],2022-09-13T10:41:26.631Z { count: 3 }
]
复制代码

我们发现:

  • 基础类型的,依旧没有发生改变。

  • 引用类型的变量,如果自身带了count属性,该属性就会被修改;如果不带该属性,就会添加count属性。

for

改变item本身

由于for 循环里,没有专门的一个变量"item",可以获取到对应的引用,我们只能用list[index]的形式去获取到每一项。

我们运行看看效果。

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},[4,4,4,4],new Date()
]for (let i = 0; i < list.length; i ++) {list[i] = 4
}console.log(list)复制代码
[ 4, 4, 4, 4, 4 ]复制代码

全部被无差别覆盖了。

改变item的属性

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},[4,4,4,4],new Date()
]for (let i = 0; i < list.length; i ++) {list[i].count = 4
}console.log(list)复制代码
[{ name: 'a', count: 4 },2,[Function: fn] { count: 4 },[ 4, 4, 4, 4, count: 4 ],2022-09-13T10:44:50.164Z { count: 4 }
]
复制代码

我们发现,和forEach的时候,表现一致:

  • 基础类型的,依旧没有发生改变。

  • 引用类型的变量,如果自身带了count属性,该属性就会被修改;如果不带该属性,就会添加count属性。

for-in

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},[4,4,4,4],new Date()
]for(let i in list) {list[i] = 4
}console.log(list)复制代码
[ 4, 4, 4, 4, 4 ]
复制代码

for in 其实和for循环一致,因为他们都是取到了index,然后修改list[index]

这里就不分别看改变item和改变item属性了。

for of

改变item本身

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},[4,4,4,4],new Date()
]for(let i of list) {i = 4
}console.log(list)复制代码
[{ name: 'a', count: 1 },2,[Function: fn],[ 4, 4, 4, 4 ],2022-09-13T10:56:11.711Z
]复制代码

我们发现item无法别更改。

改变item的属性

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},[4,4,4,4],new Date()
]for(let i of list) {i.count = 4
}console.log(list)复制代码
[{ name: 'a', count: 4 },2,[Function: fn] { count: 4 },[ 4, 4, 4, 4, count: 4 ],2022-09-13T10:57:36.085Z { count: 4 }
]复制代码

我们发现:结果和forEach一致。他们都是在迭代函数里拿到了item。

map

改变item本身

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},Symbol(),[4,4,4,4],new Date()
]list.map(item => {item = 4
})console.log(list)复制代码
[{ name: 'a', count: 1 },2,[Function: fn],Symbol(),[ 4, 4, 4, 4 ],2022-09-13T11:01:10.614Z
]复制代码

我们发现,item无动于衷。

改变item的属性

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},Symbol(),[4,4,4,4],new Date()
]list.map(item => {item.count = 4
})console.log(list)
复制代码
[{ name: 'a', count: 4 },2,[Function: fn] { count: 4 },Symbol(),[ 4, 4, 4, 4, count: 4 ],2022-09-13T10:59:53.050Z { count: 4 }
]
复制代码

分析总结

方式取值方式改变自身改变item的属性
forlist[index]可以改变list[index]基础类型不可以引用类型可以
for-inlist[index]可以改变list[index]基础类型不可以引用类型可以
for-ofitem不可以改变item基础类型不可以引用类型可以
forEachitem不可以改变item基础类型不可以引用类型可以
mapitem不可以改变item基础类型不可以引用类型可以

为什么不可以改变属性

改变自身和改变属性,原因是一致的,就是分析一下,真正操作的数据,到底是不是原数据本身。

这里,主要还是因为迭代器。

在for-of forEach map 方法中,其实item通过引用类型,指向了原来list里面的每一项。

我们来看细节:

const list = [{name: 'a', count: 1},2,function fn() {console.log(3);},Symbol(),'sss',[4,4,4,4],new Date()
]
const iter = list[Symbol.iterator]()const firstElement = iter.next()
console.log(firstElement)
firstElement.value.count = 4
console.log(firstElement)
console.log(firstElement.value === list[0]);复制代码
{ value: { name: 'a', count: 1 }, done: false }
{ value: { name: 'a', count: 4 }, done: false }
true
复制代码

对item进行操作,其实是对iterator.next() 指向的对象,也就是 iterator.next().value 进行了操作。

  • 如果原来的值是引用类型,那么iterator.next().value 和 list[index] 表示的是同一个对象。操作的时候当然可以改变原来的item;

  • 如果原来的值是基础类型,那么iterator.next().value 和 list[index] 分别指向了一个基础类型的值。操作的时候不会改变原来的item;

81dbbec5f885c7ff5f0028f6d5a25224.jpeg

离开广东好长时间了,好久没人叫我靓仔了。

大家可以在评论区里,叫我一靓仔吗?

我这么善良质朴的愿望,能被满足吗?

如果实在叫不出口的话,能帮我点下关注和右下角的点赞+在看吗?

http://www.lbrq.cn/news/1306549.html

相关文章:

  • 重庆万州网站建设找谁/seo计费系统登录
  • 做网站怎么收集资料/搜索推广竞价托管哪家好
  • 电商网站开发设计/免备案域名
  • 广州微网站建设效果/个人网站seo入门
  • 新开传奇网站180火龙/百度云建站
  • icp域名备案查询系统/seo关键词挖掘
  • 做公司年报网站登录密码是什么/百度最新人工智能
  • 做asp网站需要的实验报告单/企业网站优化哪家好
  • 整站快速排名优化/疫情最新资讯
  • 电子商务网站规划的原则/网站关键词挖掘
  • 阿里网站建设/竞价账户托管公司哪家好
  • 公司网站域名cn和com/百度工具seo
  • wordpress无法开启多站点/公司做网站推广
  • 电子商务的网站怎么做/关于友谊的连接
  • 织梦dedecms医院类网站在线预约挂号插件_utf8/全网推广费用
  • 网站创作思路/网站搜索排名优化价格
  • 做淘宝网站报告/sem是什么
  • 如何使用万网主机建设网站/济南全网推广
  • 网站设计中下拉列表怎么做/桂林网站设计制作
  • 深圳网站建设开发/收录优美图片app
  • 网站开发的职责/贵港seo
  • 公司网站的seo怎么做/百度官网首页
  • 美国地接公司怎么在中国网站做推广/天津seo霸屏
  • 肃宁县网站建设/湖南seo优化公司
  • 南昌seo站外优化/免费的行情网站app软件
  • 农业网站模板/竞价托管信息
  • wordpress扩展主题核心文件/河北seo基础
  • 做公司网站都需要什么/舆情网站直接打开怎么弄
  • 淘宝网站制作培训/山东百度推广代理商
  • 手机上制作网站的软件/今天的新闻联播
  • 前端下载文件并按GBK编码解析内容
  • Python获取网页乱码问题终极解决方案 | Python爬虫编码处理指南
  • 多方案对比分析:后端数据加密策略及实践
  • 暑期自学嵌入式——Day05(C语言阶段)
  • 基于单片机公交车报站系统/报站器
  • SVG基础语法:绘制点线面的简单示例