nodejs 学习摘要
Object.keys()
在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组,其中这个数组的内容就是这个对象的所有键值
- 传入对象,返回属性名
var obj = {'a':'123','b':'345'}; console.log(Object.keys(obj)); //['a','b'] var obj1 = { 100: "a", 2: "b", 7: "c"}; console.log(Object.keys(obj1)); // console: ["2", "7", "100"] var obj2 = Object.create({}, { getFoo : { value : function () { return this.foo } } }); obj2.foo = 1; console.log(Object.keys(obj2)); // console: ["foo"]
- 传入字符串,返回索引
var str = 'ab1234'; console.log(Object.keys(str)); //[0,1,2,3,4,5]
- 如果我们想要获取字符串中的某一个值,那么我们就可以通过下面的方法获取:
var str = 'ab1234'; console.log(Object.keys(str)); //[0,1,2,3,4,5] Object.keys(str).map(function (index) { console.log(str[index]); });
-
nodejs中forEach和普通循环区别
问题描述:
最近在写代码中发现在forEach循环中,使用await函数跟正常的循环有区别,所以进行记录。
一般我们都将forEach叫做增强for循环,确实减少了部分代码量,但是当内部使用await的时候需要注意,下面我写了两个例子。
1、如果在循环中不使用await这个promise,区别不大
2、forEach和普通循环中执行await函数情况
(1)forEach
[1,2,3].forEach(function hehe),先执行hehe(1),假如hehe里面有异步,就不会等它执行完,继续执行hehe(2)了,所以有可能出现,整个函数执行完了,但是forEach里面的函数还没执行完
async function test(){ console.log('start'); const arr = [1,2,3] arr.forEach(async(t)=>{ await new Promise((resolve)=>{setTimeout(()=>{resolve()},1000)}) console.log(t); }) console.log('end'); } test();
打印出来的结果是:start end 1 2 3
(2)普通循环
async function test() { console.log('start'); const arr = [1, 2, 3] for (let index = 0; index < arr.length; index++) { const element = arr[index]; await new Promise((resolve) => { setTimeout(() => { resolve() }, 1000) }) console.log(arr[index]); } console.log('end'); } test();
打印结果为: start 1 2 3 end ,这才是我们需要的结果
for(let t of arr){await func(t)},这样子是一个promise完才进行下一个,很多时候我们是需要这样的
想:如果我们需要写jest测试的时候,对于两种情况,写的测试代码也应该是稍有区别的,普通循环的话我们只需要在测试的时候用await来写,但是forEach因为在真正打印出来值之前已经结束了promise,那么写的时候是需要setTimeout设置几秒的。
3、forEach和普通循环中执行同步函数
代码我就不粘贴了,只需要把上面两处的代码中await new Promise((resolve) => { setTimeout(() => { resolve() }, 1000) })
注释掉即可,测试发现,两个循环最终结果都是:start 1 2 3 end
4、理论知识的区别:
(1)for循环是可以使用break和continue去终止循环的,但是forEach不行
(2)forEach代码量少
(3)for多数时候都可以使用,当然一般需要知道循环次数,而forEach更适合集合对象的遍历和操作
(4)注意内部使用await的情况
(5)只能对元素进行顺序的访问,只能访问数组或集合中的所有元素,循环中没有当前索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix