for / forEach / for in /for of 的区别及优势

1. 关于 for与forEach的区别
ES5中新增数组方法 forEach(fn) ,我曾经以为新增方法会比for循环更高效,实际上,for>forEach>map
forEach()方法的优势体现在遍历稀疏数组上[1,,2,,3] ,它会自动跳过空位.

关于for与forEach循环引出的问题
在js中 ,数组属于object类型 (for in 遍历会遍历出其原型上的属性)而length属于不可枚举属性
const arr= [1,2,3]
arr.name = "hello"
for in ...

(对象属性有可枚举和不可枚举之分, 他们是由属性的enumerable值决定的,可枚举性决定了和这个属性能否
被for in查找遍历到)


Object对象的propertyIsEnumerable()方法可以判断此对象是否包含某个属性,并且这个属性是否可枚举
#####(结果tmd一测试,只输出一个true,只判断了有无,不知道能不能枚举, 此处标记一下,日后再说)


for of 遍历
for(let value of arr){} value代表值
跟 forEach 相比,可以正确响应 break, continue, return。
for-of 循环不仅支持数组,还支持大多数类数组(伪数组)对象,例如 DOM nodelist 对象。
for-of 循环也支持字符串遍历,它将字符串视为一系列 Unicode 字符来进行遍历。
for-of 也支持 Map 和 Set (两者均为 ES6 中新增的类型)对象遍历。


##关于setInterval 和setTimeout问题
setTimeout,setInterval都存在一个最小延迟的问题,虽然你给时间周期为0,但是浏览器执行的是自己的最小值。
HTML5标准是4ms,但并不意味着所有浏览器都会遵循这个标准,包括手机浏览器在内,这个最小值既有可能小于4ms也
有可能大于4ms。在标准中,如果在setTimeout中嵌套一个setTimeout, 那么嵌套的setTimeout的最小延迟为10ms。
setTimeout(function () { alert(2)}) alert(1) // 先弹出1 后弹出2
假如需要在页面添加1000个标签,测试一下GUI渲染一共需要多少 时间, 如果直接写在前后两个new Date();然后
两个时间想减,得出的时间要远小于实际时间, 正确做法应该是在最后的时间加一个setTimeout(function(){ time2 = new Date()
t = time2 -time1
},0)
这两种方法。 都有一个最小时间 html5标准中为 4ms 。但是因浏览器和设备而不同,大于4ms或小于4ms都有可能

//JS执行是一个队列的方式
js可以利用定时器完成运动效果, 但是在jQuery的animate中 时间周期为13ms, 不知为何? (如果1000毫秒60帧,每帧16.67毫秒)
有空问问老师吧

js线程会和GUI线程冲突, 当加载js时,GUI线程挂起保存到队列中,当js线程空闲时再运行js线程 (js线程为单线程)

 

转载于:https://www.cnblogs.com/spade75/p/7158236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值