1. 关于 for与forEach的区别
ES5中新增数组方法 forEach(fn) ,我曾经以为新增方法会比for循环更高效,实际上,for>forEach>mapforEach()方法的优势体现在遍历稀疏数组上[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线程为单线程)